什么话都不多说,直接上主题
最近突发奇想,想学习一下动态壁纸,在网上也看了很多的资料,自己也照着写了一个小例子,现在把我自己看到的步骤写一下,记录下来。
一、动态壁纸
它是一个service,它继承自WallpaperService类,实现了public void oncreate(),public Engine onCreateEngine(),public void onDestory()方法。
重点来了,第二个方法,public Engine onCrreateEngine()方法,它返回的是一个Engine引擎(return new SimpleEngine()),现在我们就来看看这个SimpleEngine类。
二、SimpleEngine类
继承自WallpaperService.Engine类,实现了Engine中的
public voidonCreate(SurfaceHolder surfaceHolder){... setTouchEventEnabled(true)};//设为可触碰
public void onDestroy(){...}
public void onVisibilityChanged(boolean visible) //当界面完全被覆盖(重新显示的时候)的时候会调用此方法
{
if(visible)//如果可见
{
...
}
else//如果不可见
{
...
}
public void onSurfaceCreated(SurfaceHolderholder) //重写onSurfaceCreated方法
{
super.onSurfaceCreated(holder);//调用父类对应方法
}
public void onSurfaceChanged(SurfaceHolder holder, int format, int width,int height)
{
...
}
public oid onSurfaceDestoryed(SurfaceHolderholder)
{
super.onSurfaceDestoryed(holder);
mVidibily = false;
mHandler.removeCallbacks(mRunnable);
}
public void onOffsetChanged(....){}//位移有变化时调用该方法
我自己写了一个private void draw()方法,在这个方法中进行界面的绘制
需要用到SurfaceHolder。
三、SurfaceHolder类
在draw()方法中需要用到,
SurfaceHolderholder = getSurfaceHolder();
canvas = holder.lockCanvas();
canvas.drawColor(Color.WHITE);
...
...
holder.unlockCanvasAndPost(canvas);
mHandler.removeCallbacks(mRunnable);
if(mVisible){mHandler.postDelayed(mRunnable,1000);}