自学动态壁纸

什么话都不多说,直接上主题

最近突发奇想,想学习一下动态壁纸,在网上也看了很多的资料,自己也照着写了一个小例子,现在把我自己看到的步骤写一下,记录下来。

一、动态壁纸

它是一个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);}

你可能感兴趣的:(动态壁纸)