android 动态壁纸
16lz
2021-01-23
引用:http://www.ophonesdn.com/article/show/278
http://developer.android.com/resources/samples/CubeLiveWallpaper/src/com/example/android/livecubes/cube1/CubeWallpaper1.html
标签 :动态壁纸LiveWallpapers时间壁纸TimeWall
随着三星Oscar的上市,流畅的操作,华丽的界面,OPhone 2.0的不俗表现不禁让人眼前一亮。作为OPhone 2.0一个新特性,动态壁纸(Live Wallpapers)为用户带来了更炫体验。本文主要通过一个完整的时间壁纸(TimeWall)为大家介绍如何开发 Live Wallpapers。还没开发环境?赶紧去下载OPhone SDK 2.0吧!
1、 Live Wallpapers是什么? 在 oscar上有一个动态壁纸叫“天空草地”,用过一段时间,可以发现,随着时间的变化,壁纸的天空就会由蓝蓝青天变成繁星满天。看看效果: 为什么壁纸还有这么神奇的变化,这中间到底是什么在起作用?其实,一个 Live Wallpaper就是一个apk!也就是说,动态壁纸的实质是一个apk在后台不断地重绘壁纸,所以我们可以让小草长高,小鸟飞翔。 来看一下我们 TimeWall的AndoridManifest.xml: view plain copy to clipboard print ?- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.oms.LiveWall"android:versionCode="1"
- android:versionName="1.0">
- <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
- <serviceandroid:label="@string/app_name"android:name=".TimeWall"
- android:permission="android.permission.BIND_WALLPAPER">
- <intent-filter>
- <actionandroid:name="android.service.wallpaper.WallpaperService"/>
- </intent-filter>
- <meta-dataandroid:name="android.service.wallpaper"
- android:resource="@xml/alive_wall"/>
- </service>
- </application>
- <uses-sdkandroid:minSdkVersion="7"/>
- </manifest>
- publicclassTimeWallextendsWallpaperService{
- publicEngineonCreateEngine(){
- returnnewTimeEngine();
- }
- publicclassTimeEngineextendsEngine{
- //...morecode
- }
- }
- @Override
- publicvoidonCreate(SurfaceHoldersurfaceHolder){
- super.onCreate(surfaceHolder);
- setTouchEventsEnabled(true);
- }
- @Override
- publicvoidonDestroy(){
- super.onDestroy();
- mHandler.removeMessages(DRAW);
- }
- @Override
- publicvoidonSurfaceCreated(SurfaceHolderholder){
- super.onSurfaceCreated(holder);
- mHandler.sendEmptyMessage(DRAW);
- }
- @Override
- publicvoidonSurfaceDestroyed(SurfaceHolderholder){
- super.onSurfaceDestroyed(holder);
- mHandler.removeMessages(DRAW);
- }
- privateHandlermHandler=newHandler(){
- publicvoidhandleMessage(Messagemsg){
- switch(msg.what){
- caseDRAW:
- drawWall();
- break;
- }
- }
- };
- privatevoiddrawWall(){
- SurfaceHolderholder=getSurfaceHolder();
- Canvascanvas=holder.lockCanvas();
- drawTime(canvas);
- drawCross(canvas);
- holder.unlockCanvasAndPost(canvas);
- mHandler.removeMessages(DRAW);
- mHandler.sendEmptyMessageDelayed(DRAW,50);
- }
附件代码:
- packagecom.OPhonesdn.timewall;
- importjava.text.SimpleDateFormat;
- importjava.util.Date;
- importandroid.graphics.Canvas;
- importandroid.graphics.Color;
- importandroid.graphics.Paint;
- importandroid.os.Handler;
- importandroid.os.Message;
- importandroid.service.wallpaper.WallpaperService;
- importandroid.view.MotionEvent;
- importandroid.view.SurfaceHolder;
- publicclassTimeWallextendsWallpaperService{
- publicEngineonCreateEngine(){
- returnnewTimeEngine();
- }
- publicclassTimeEngineextendsEngine{
- privatefinalfloatSTEP_X=2f;
- privatefinalfloatSTEP_Y=7f;
- privatefinalfloatSCOPE_LEFT=10f;
- privatefinalfloatSCOPE_RIGHT=110f;
- privatefinalfloatSCOPE_TOP=250f;
- privatefinalfloatSCOPE_BOTTOM=600f;
- privatefinalfloatRADIUS=20f;
- privatefinalintDIRECTION_1=1;//movetorighttopside
- privatefinalintDIRECTION_2=2;//movetorightbottomside
- privatefinalintDIRECTION_3=3;//movetoleftbottomside
- privatefinalintDIRECTION_4=4;//movetolefttopside
- privatefinalintDRAW=1;
- privatefloatmTouchX=-1f;
- privatefloatmTouchY=-1f;
- privatefloatmLocationX=0f;
- privatefloatmLocationY=400f;
- privateintmDirection=1;
- privatePaintmPaint=newPaint();
- privateHandlermHandler=newHandler(){
- publicvoidhandleMessage(Messagemsg){
- switch(msg.what){
- caseDRAW:
- drawWall();
- break;
- }
- }
- };
- publicTimeEngine(){
- mPaint.setColor(Color.RED);
- mPaint.setAntiAlias(true);
- mPaint.setStrokeWidth(4);
- mPaint.setStrokeCap(Paint.Cap.BUTT);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setTextSize(40);
- }
- @Override
- publicvoidonCreate(SurfaceHoldersurfaceHolder){
- super.onCreate(surfaceHolder);
- setTouchEventsEnabled(true);
- }
- @Override
- publicvoidonDestroy(){
- super.onDestroy();
- mHandler.removeMessages(DRAW);
- }
- @Override
- publicvoidonSurfaceCreated(SurfaceHolderholder){
- super.onSurfaceCreated(holder);
- mHandler.sendEmptyMessage(DRAW);
- }
- @Override
- publicvoidonSurfaceDestroyed(SurfaceHolderholder){
- super.onSurfaceDestroyed(holder);
- mHandler.removeMessages(DRAW);
- }
- @Override
- publicvoidonTouchEvent(MotionEventevent){
- if(event.getAction()==MotionEvent.ACTION_MOVE
- ||event.getAction()==MotionEvent.ACTION_DOWN){
- mTouchX=event.getX();
- mTouchY=event.getY();
- }else{
- mTouchX=-1;
- mTouchY=-1;
- }
- super.onTouchEvent(event);
- }
- privatevoiddrawWall(){
- SurfaceHolderholder=getSurfaceHolder();
- Canvascanvas=holder.lockCanvas();
- drawTime(canvas);
- drawCross(canvas);
- holder.unlockCanvasAndPost(canvas);
- mHandler.removeMessages(DRAW);
- mHandler.sendEmptyMessageDelayed(DRAW,50);
- }
- privatevoiddrawTime(Canvasc){
- Datedate=newDate(System.currentTimeMillis());
- SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
- StringstrDate=sdf.format(date);
- c.save();
- c.drawColor(0xff000000);
- c.drawText(strDate,mLocationX,mLocationY,mPaint);
- switch(mDirection){
- caseDIRECTION_1:
- mLocationX=mLocationX+STEP_X;
- mLocationY=mLocationY-STEP_Y;
- if(mLocationY<=SCOPE_TOP){
- mDirection=DIRECTION_2;
- }
- break;
- caseDIRECTION_2:
- mLocationX=mLocationX+STEP_X;
- mLocationY=mLocationY+STEP_Y;
- if(mLocationX>=SCOPE_RIGHT){
- mDirection=DIRECTION_3;
- }
- break;
- caseDIRECTION_3:
- mLocationX=mLocationX-STEP_X;
- mLocationY=mLocationY+STEP_Y;
- if(mLocationY>=SCOPE_BOTTOM){
- mDirection=DIRECTION_4;
- }
- break;
- caseDIRECTION_4:
- mLocationX=mLocationX-STEP_X;
- mLocationY=mLocationY-STEP_Y;
- if(mLocationX<=SCOPE_LEFT){
- mDirection=DIRECTION_1;
- }
- break;
- }
- c.restore();
- }
- privatevoiddrawCross(Canvasc){
- if(mTouchX>=0&&mTouchY>=0){
- c.drawLine(mTouchX-RADIUS,mTouchY,mTouchX+RADIUS,
- mTouchY,mPaint);
- c.drawLine(mTouchX,mTouchY-RADIUS,mTouchX,
- mTouchY+RADIUS,mPaint);
- }
- }
- }
- }
更多相关文章
- android中的spinner动态加载内容
- Android 打开浏览器的几种方法
- Unity调用Android配置方法
- Android 滑动手势侦测方法介绍
- Android 动态logo bootanimation.zip 制作
- 安卓selector使用方法
- 应用界面主题Theme使用方法
- Android 使用html做UI的方法---js与java的相互调用