您的位置:首页 > 移动开发 > Android开发

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>


壁纸运行装到手机上后,是看不到图标的,只有找到系统设置,设置壁纸中才能看到











源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: