• 周五. 4 月 24th, 2026

物嫩软件资讯网

软件资讯来物嫩

自学动态壁纸

admin@wunen

4 月 23, 2025

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

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

一、动态壁纸

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注