Android 手机壁纸(动态2)
2015-08-14 16:46
561 查看
<span style="font-size:12px;">package com.example.android; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.PorterDuff.Mode; import android.graphics.RectF; import android.os.Handler; import android.service.wallpaper.WallpaperService; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.WindowManager; public class MyWallPaper extends WallpaperService { private Engine engine; @Override public void onCreate() { Log.d("ee", "onCreate"); super.onCreate(); } @Override public Engine onCreateEngine() { Log.d("ee", "onCreateEngine"); if (engine != null) { engine = null; } engine = new WallPaperEngine(); return engine; } @Override public void onDestroy() { Log.d("ee", "onDestroy"); super.onDestroy(); } public class WallPaperEngine extends Engine { /** * 画笔 */ private Paint[] mPaint=new Paint[6]; /** * 壁纸是否可见 */ private boolean isVisably = false; /** * 管理线程 */ private Handler mHandler; /** * */ private SurfaceHolder mSurfaceHolder; /** * */ private Canvas mCanvas; /** * 画笔颜色 */ private int mColorPaint = 1; /** * 屏幕宽 */ private int screenWidth; /** * 屏幕高 */ private int screenHeight; /** * 开启壁纸线程 */ private Runnable mRunnable = new Runnable() { @Override public void run() { drawFram(); } }; /** * 画壁纸图 */ protected void drawFram() { Log.d("ee", "drawFram.."); mSurfaceHolder = getSurfaceHolder();// 获得SurfaceHolder对象 mCanvas=null; try{//如果不try一下会抛异常unlockCanvasAndPost and IllegalArgumentException mCanvas = mSurfaceHolder.lockCanvas();// 获得canvas对象 mCanvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);//每次重画要清屏 // 进行绘图操作 for (int i = 0; i < 6; i++) { drawLove(mCanvas,i); } mHandler.postDelayed(mRunnable, 5000); } finally { mSurfaceHolder.unlockCanvasAndPost(mCanvas); // 释放canvas锁,并且显示视图 } } private void drawLove(Canvas mCanvas, int index) { /** 画一个心 **/ int i, j; double x, y, r; int indexX=(int)(0+Math.random()*(screenWidth-270-0+1)); int indexY=(int)(0+Math.random()*(screenHeight-270-0+1)); if (index==0) { for (i = 90; i <= 190; i++) { for (j = 90; j <= 190; j++) { r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j)) * 20; x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + 320 / 2; y = -r * Math.sin(Math.PI / 45 * j) + 400 / 4; mCanvas.drawPoint((float) x+indexX, (float) y+indexY, mPaint[index]); } } }else { for (i = 0; i <= 90; i++) { for (j = 0; j <= 90; j++) { r = Math.PI / 45 * i * (1 - Math.sin(Math.PI / 45 * j)) * 20; x = r * Math.cos(Math.PI / 45 * j) * Math.sin(Math.PI / 45 * i) + 320 / 2; y = -r * Math.sin(Math.PI / 45 * j) + 400 / 4; Log.d("ee", x+" ----------- "+y); mCanvas.drawPoint((float) x+indexX, (float) y+indexY, mPaint[index]); } } } } public WallPaperEngine() { Log.d("ee", "WallPaperEngine.."); WindowManager wm = (WindowManager)MyWallPaper.this.getSystemService(Context.WINDOW_SERVICE); this.screenWidth = wm.getDefaultDisplay().getWidth();//屏幕宽度 this.screenHeight = wm.getDefaultDisplay().getHeight();//屏幕高度 // 初始化6只画笔 for (int i = 0; i < 6; i++) { Paint paint=new Paint(); paint.setTextSize(44); paint.setStyle(Style.STROKE); paint.setAntiAlias(true); paint.setStrokeWidth(4); switch (i) { case 0: paint.setColor(Color.RED); break; case 1: paint.setColor(Color.BLUE); break; case 2: paint.setColor(Color.GREEN); break; case 3: paint.setColor(Color.YELLOW); break; case 4: paint.setColor(Color.argb(255, 255, 181, 216)); break; case 5: paint.setColor(Color.argb(255, 0, 255, 255)); break; default: paint.setColor(Color.WHITE); break; } mPaint[i]=paint; } mHandler = new Handler(); } @Override public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); Log.d("ee", "onCreate.."); // 作用是使壁纸能响应touch event,默认是false setTouchEventsEnabled(true); } @Override public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) { super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset); Log.d("ee", "onOffsetsChanged.."); drawFram(); } @Override public void onVisibilityChanged(boolean visible) { super.onVisibilityChanged(visible); Log.d("ee", "onVisibilityChanged.."); isVisably = visible; if (visible) { // 以实现一秒后调用此Runnable对象,以实现每一秒实现一次的定时器操作 mHandler.postDelayed(mRunnable, 1000); } else { // 关闭此定时器 mHandler.removeCallbacks(mRunnable); } } @Override public void onSurfaceDestroyed(SurfaceHolder holder) { super.onSurfaceDestroyed(holder); Log.d("ee", "onSurfaceDestroyed.."); isVisably=false; // 关闭此定时器 mHandler.removeCallbacks(mRunnable); } @Override public void onTouchEvent(MotionEvent event) { super.onTouchEvent(event); Log.e("ee", "onTouchEvent.."+event.getAction()); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: /** 绘制文字 **/ mCanvas.drawText("Loving You", event.getX(), event.getY(), mPaint[0]); break; default: break; } } @Override public void onDestroy() { super.onDestroy(); Log.d("ee", "onDestroy.."); // 关闭此定时器 mHandler.removeCallbacks(mRunnable); } } }</span>
壁纸运行装到手机上后,是看不到图标的,只有找到系统设置,设置壁纸中才能看到
源码下载
相关文章推荐
- android中利用animation实现Image的循环移动
- android权限
- 可展开/折叠的Android TextView:ExpandableTextView
- Android 定制EditText 改变 底线颜色
- 你还在用notifyDataSetChanged?
- Android笔记(十三) Android中的基本组件——文本
- android adapter 深刻分析
- [Android 4.4.3] 泛泰A870 Mokee4.4.3 20140610 RC2.0 通过刷第三版 by syhost
- ViewDragHelper详解
- Android 长度单位dp , sp ,px总结
- Android开发规范
- 如何能够在Android运行Java的main方法
- Android自定义View画曲线
- Android framework系统默认设置修改
- android linearlayout代替listview实现
- Android中定时器的3种实现方法
- Android国际化
- Android Fragment 你应该知道的一切
- SEAndroid的各种策略文件
- Android Fragment 真正的完全解析(下)