当前位置:操作系统 > 安卓/Android >>

Android 动态壁纸引擎试刀学习(初识安卓引擎)

动态壁纸蛮好玩的,也没接触过,看官方有就拿了学习下,是小马第一次接触引擎Engine,激动兴奋...效果做出来了,就放博客里,记录笔记,吼吼,跟大家交流学习, 废话不多说了,先看效果,再看源码,之后小马会把安卓动态壁纸那个水波纹也写在博客里,供大家交流学习,今天的效果如下图所示,因为手机开机后就要加载图片,所以小马就直接从开机启动完成后讲了,看图...
未开锁时立方体形式一:

开锁时立方体形式一与二:


简单的绘制效果,因为立方体都是下面这些图(由三角形拼成的)拼的,所以此处贴下这个效果图,效果制作的代码我放在形式一注释里面了,大家可以试下的,就是这个效果,临时引用的:

工程结构如下图所示:

   因为形式一与形式二只是绘制点不一样,两个类都一样,防止篇幅过长(51有限制,超过80000字符就挂了,我已经超过了,这是第二边写了,所以形式二代码就不贴了),小马就直接贴形式一的代码与配置文件代码,详细的如有朋友要学习的话,下载下DEMO学习就是,小马基本的注释都加了,因为也在学习阶段,如有地方不足的,希望大家直接留言,批评指出,小马肯定感谢...
立方体形式一控制类代码:
  

1. package xiaoma.cube1;
2. 
3. import android.graphics.Canvas;
4. import android.graphics.Paint;
5. import android.os.Handler;
6. import android.os.SystemClock;
7. import android.service.wallpaper.WallpaperService;
8. import android.view.MotionEvent;
9. import android.view.SurfaceHolder;
10. 
11. /**
12.  * @Title: CubeWallpaper1.java
13.  * @Package cube1
14.  * @Description: 初识Android动态壁纸引擎
15.  * @author XiaoMa
16.  */
17. 
18. /*
19.  * 因为小马没接触过引擎,也无从下手学习,今天就拿官方的例子来试试刀了,
20.  * 吼吼,刚开始不知道,看了下代码,里面有讲到WallPaperService
21.  * 查询这个服务可以查到与之相关联的类与方法,如下面官方文档中讲的,大家
22.  * 英语不好也可以用工具看个大概,英语不好的朋友记得多用工具学习下,小马
23.  * 英语也不咋的.... 
24.  * A wallpaper service is responsible for showing a live wallpaper behind
25.  * applications that would like to sit on top of it. This service object itself
26.  * does very little -- its only purpose is to generate instances of
27.  * WallpaperService.Engine as needed. Implementing a wallpaper thus involves
28.  * subclassing from this, subclassing an Engine implementation, and implementing
29.  * onCreateEngine() to return a new instance of your engine
30.  * 上面讲的大体是:一个类必须是WallpaperService引擎类的子类,而且里面必须重写
31.  * onCreateEngine这个方法,要仔细看的话小马也看不懂英文,照着例子,看官方文档,
32.  * 多猜多用工具查就行了,小马英语烂的可以让你吐血...我能看懂,你肯定能看懂
33.  */
34. public class CubeWallpaper1 extends WallpaperService {
35. 
36.     /*常用的都是这样的,用一个handler来动态的去刷新UI,对吧?猜的,看下面代码到底是不是*/
37.     private final Handler mHandler = new Handler();
38. 
39.     /**
40.      * 这个方法与Activity里面的一样,当这个类的服务被第一次创建时
41.      * 调用,也就是说,这个方法只调用一次..
42.      */
43.     @Override
44.     public void onCreate() {
45.         super.onCreate();
46.     }
47.     
48.     /**
49.      * 与上面反的,销毁时调用,这个猜下,
50.      * 不懂了查文档
51.      */
52.     @Override
53.     public void onDestroy() {
54.         super.onDestroy();
55.     }
56.     
57.     /**
58.      * 这个方法在类注释中写明了
59.      * implementing onCreateEngine() to return a new instance of your engine
60.      * 必须实现这个方法来返回我们自己定义引擎的一个实例
61.      */
62.     @Override
63.     public Engine onCreateEngine() {
64.         return new CubeEngine();
65.     }
66.     
67.     
68.     /**
69.      * 
70.     * @Title: CubeWallpaper1.java
71.     * @Package cube1
72.     * @Description: 自定义引擎类
73.     * @author XiaoMa
74.      */
75.     class CubeEngine extends Engine {
76. 
77.         private final Paint mPaint = new Paint();
78.         private float mOffset;
79.         /*用户触摸位置*/
80.         private float mTouchX = -1;
81.         private float mTouchY = -1;
82.         private long mStartTime;
83.         
84.         /*屏幕中心坐标,记下,是中心不是原心(0,0)*/
85.         private float mCenterX;
86.         private float mCenterY;
87. 
88.         private final Runnable mDrawCube = new Runnable() {
89.             public void run() {
90.                 drawFrame();
91.             }
92.         };
93.         private boolean mVisible;
94. 
95.         CubeEngine() {
96.             
97.             /*下面这几行就为了在屏幕中画立方体的线条而做准备*/
98.             final Paint paint = mPaint;
99.             paint.setColor(0xffffffff);//画笔颜色
100.             paint.setAntiAlias(true);//抗锯齿
101.             paint.setStrokeWidth(2);//线条粗细,猜的,不知道对不对
102.             paint.setStrokeCap(Paint.Cap.ROUND);
103.             paint.s

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,