读书人

怎么把默认的壁纸设置为动态壁纸

发布时间: 2012-08-29 08:40:14 作者: rapoo

如何把默认的壁纸设置为动态壁纸

?

?

?

在frameworks\base\core\res\res\values目录找到Config.xml文件,最后一行有定义:

?




最好指定uses-feature标记
在AndroidManifest.xml中指定如下代码会使程序在市场中对不支持动态壁纸功能的用户隐藏:

<uses-feature android:name="android.software.live_wallpaper" />



必须在onCreate(SurfaceHolder surfaceHolder)中指定setTouchEventsEnabled(true);
如果你放在onSurfaceCreated(SurfaceHolder holder)中指定,你会很郁闷地发现动态壁纸在2.1版本的系统中可以运行,2.2版本却报错。
2 楼 w11h22j33 2011-01-20 参考资料
http://www.androiddevblog.net/android/creating-android-live-wallpaper#

http://code.google.com/p/krvarma-android-samples/source/browse/trunk/patternwallpaper/?r=80
3 楼 w11h22j33 2011-01-20 一:定义一个壁纸类继承WallpaperService

关键的继承方法为

@Override
public Engine onCreateEngine() {

return new MyWallEngine(this.getBaseContext());
}

具体的实现就像如何实现一个Engine类

android.service.wallpaper.WallpaperService.Engine

该类的关键因素包括如下:

@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);

// By default we don't get touch events, so enable them.
setTouchEventsEnabled(true);
}



@Override
public void onDestroy() {
super.onDestroy();

//do destory
}

@Override
public void onTouchEvent(MotionEvent event) {

}

@Override
public void onVisibilityChanged(boolean visible) {

}



@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
super.onSurfaceChanged(holder, format, width, height);

}

@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
}

@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);

}



@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xStep,
float yStep, int xPixels, int yPixels) {

}

二:由于Engine不是继承于Activity,在涉及到Context来绘制图形时,需要从外部传入Context

比如:

@Override
public Engine onCreateEngine() {

return new MyEngine(this.getBaseContext());
}

this.getBaseContext()可以获取一个Context,可以根据该Context获取响应的信息



三:绘制图片时,通过Canvas.drawBitmap(bmp,left,top,Paint)

如果设置left,top为0,0,则绘制的图片将只在第4象限显示;

即屏幕默认的左上角坐标为(-240,-320)

Bitmap bmp = BitmapFactory.decodeResource(this.ctx.getResources(),
R.drawable.love);
Paint cPaint = new Paint(); c.clipRect(-240, -320, 240, 320);//显示从(-240, -320)到(240, 320)的区域(单位:象素)
c.drawBitmap(bmp, -240, -320, cPaint);

读书人网 >移动开发

热点推荐