`
crazysumer
  • 浏览: 49601 次
社区版块
存档分类
最新评论

【安卓笔记】Live Wallpaper 一

 
阅读更多

 

一开始我就想弄个几只小猫往下掉(或者飘?)的效果,小猫都有了,愣是没弄出来(我对不住你们哭,喵众猫:犹豫

 

于是现在变成了系统时间(还是没有格式化的那种吐舌头)在不停跑啊跑

 

要制作动态壁纸

1.需要继承WallpaperService,这个Service里主要用Engine来实现动态壁纸

2.这个Engine,看到网上说生命周期是onCreate->onSurfaceCreated->onSurfaceDestroyed->onDestroyed,好嘛,我暂时不知道他对不对,不过我就没写onVisibilityChanged,然后出错了(还是很诡异的错)

3.自己要做长时间的刷新某个东东的事,写到一个线程中,用Handler去控制

 

首先建MyWallpaperService 这个类

public class MyWallpaperService extends WallpaperService {

	@Override
	public Engine onCreateEngine() {
		return new MyEngine();
	}
	/*
	 * surface,就叫他一个表层吧,要用一个surfaceholder来操作这个表层,这个holder可以绑定一个画布,
	 * 这么说,就把这个holder比作双面胶,把画布给粘到表层上,
	 * 至于在画布上作画的事,就要用笔(paint)来了
	 * */

	class MyEngine extends Engine {
		private Handler h = new Handler();
		private Paint p;
		private Canvas c;

		// 用一个线程来处理绘制动态壁纸的过程
		Runnable dThread = new Runnable() {
			@Override
			public void run() {
				drawWallpaper();
			}
		};

		private void drawWallpaper() {
			SurfaceHolder holder = getSurfaceHolder();
			c = holder.lockCanvas();
			c.drawColor(Color.WHITE);
			drawTime(c);
			holder.unlockCanvasAndPost(c);

			h.postDelayed(dThread, 100);
		}

		private void drawTime(Canvas c) {
			long l = System.currentTimeMillis();
			c.drawText(l + "", 200, 300, p);
			/*
			 * Saves the current matrix and clip onto a private stack.
			 * */
			// c.save();
			/*
			 * This call balances a previous call to save(), and is used to
			 * remove all modifications to the matrix/clip state since the last
			 * save call.
			 */
			// c.restore();
			/*
			 * 所以,这一段对matrix/clip的保存跟移除是个什么意义呢?暂不明,貌似不影响效果
			 * */
			// Log.d("绘制时间", "draw time");
		}

		public MyEngine() {
			p = new Paint();
			p.setColor(Color.RED);
			p.setAntiAlias(true);
			p.setStyle(Style.STROKE);
			p.setStrokeWidth(3);
			p.setTextSize(30);
		}

		@Override
		public void onCreate(SurfaceHolder surfaceHolder) {
			Log.i("MyEngine----------", "engine created");
			super.onCreate(surfaceHolder);
//			setTouchEventsEnabled(true);//在这个程序中没用到
		}

		/**
		 * 调用SurfaceHolder.Callback中的回调函数surfaceCreated
		 * */
		@Override
		public void onSurfaceCreated(SurfaceHolder holder) {
			Log.i("MyEngine----------", "surface created");
			super.onSurfaceCreated(holder);
		}

		/**
		 * 这个方法是必须实现的,要不然会一直显示"正在载入动态壁纸..." Called to inform you of the
		 * wallpaper becoming visible or hidden. It is very important that a
		 * wallpaper only use CPU while it is visible..
		 * 虽然还不太懂为什么,但人家说了,很重要,只有可见的时候才能占用CPU,为了性能也必须实现
		 * */
		@Override
		public void onVisibilityChanged(boolean visible) {
			super.onVisibilityChanged(visible);
			if (visible) {
				h.postDelayed(dThread, 100);
			} else {
				h.removeCallbacks(dThread);
			}
		}

		@Override
		public void onSurfaceDestroyed(SurfaceHolder holder) {
			Log.i("MyEngine----------", "surface destoryed");
			super.onSurfaceDestroyed(holder);
			h.removeCallbacks(dThread);
		}

		@Override
		public void onDestroy() {
			Log.i("MyEngine----------", "engine destoryed");
			super.onDestroy();
			h.removeCallbacks(dThread);
		}

	}

}

 

在AndroidManifest.xml中去配置这个service,intent-filter中action的name跟meta-data中的name都是API中推荐(还是叫规定?)的

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.saya.mylivewallpaper"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <service
            android:name=".MyWallpaperService"
            android:enabled="true"
            android:icon="@drawable/p_01"
            android:label="天上掉下一只猫"
            android:permission="android.permission.BIND_WALLPAPER" >
            <intent-filter android:priority="1" >
                <action android:name="android.service.wallpaper.WallpaperService" />
            </intent-filter>

            <meta-data
                android:name="android.service.wallpaper"
                android:resource="@xml/wallpaper" />
        </service>
    </application>
</manifest>

 

 

在res下新建xml文件夹,在文件夹中建wallpaper.xml,即上面meta-data中resource中用到的,就是对你自己的这个动态壁纸的一些设置吧

<?xml version="1.0" encoding="UTF-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
    android:thumbnail="@drawable/p_01" />

 

 

这个thumbnail的作用,就是出现下面这只小猫

 

嗯,这样就算完了

 

 

 上面提到的错误,logcat没有报错,每次程序运行就停留在这个界面,坑爹

 

 

 

传送门:

牛逼轰轰的一个:http://mzh3344258.blog.51cto.com/1823534/806560

生命周期出自:http://www.ophonesdn.com/article/show/278

另外:http://www.cnblogs.com/carmanloneliness/archive/2012/03/10/2388500.html

http://www.oschina.net/question/157182_37775

 

 

 

  • 大小: 146.9 KB
  • 大小: 41.5 KB
  • 大小: 24.9 KB
分享到:
评论

相关推荐

    【安卓笔记】Live Wallpaper 二:天上掉下一只猫

    这篇名为“【安卓笔记】Live Wallpaper 二:天上掉下一只猫”的博文,主要探讨了如何创建一个动态壁纸应用,其中的核心是将一只可爱的猫咪作为动态元素融入到用户的手机背景中。我们将详细解析这个主题,深入理解...

    两个Android 动态壁纸 Live Wallpaper例子

    在Android平台上,动态壁纸(Live Wallpaper)是一种可以让用户自定义主屏幕背景的高级功能,它不仅限于静态图片,还能展示动画或者交互式效果。本压缩包提供的"两个Android 动态壁纸 Live Wallpaper-...

    Android代码-Live-Wallpaper-App

    LiveWallpaper Live Wallpaper App using OpenGL ES 2.0

    Android 动态壁纸 Live Wallpaper

    Android动态壁纸,或者说“Live Wallpaper”,是Android操作系统中一种特殊的应用类型,允许用户将动态、交互式的背景设置为手机或平板电脑的主屏幕壁纸。这种壁纸不仅提供了静态图像的视觉体验,还可以根据用户的...

    Android动态桌面LiveWallpaper

    在Android系统中,动态桌面(Live Wallpapers)是一种可以为用户提供动态视觉效果的壁纸类型,与静态壁纸不同,它可以展示动画、3D图形或其他交互式元素。本教程将深入探讨如何制作Android动态壁纸,主要围绕以下几...

    android live wallpaper 教程

    在Android 2.1版本中引入了一项新功能——动态壁纸(Live Wallpaper),它为用户提供了更加生动且交互性的桌面背景。与传统的静态壁纸不同,动态壁纸不仅能够显示动画效果,还能响应用户的触摸操作。本教程旨在介绍...

    华丽 桌面插件 Ditalix Live Wallpaper Suite 1.2.3.10

    Ditalix Live Wallpaper Suite是一款动态壁纸集合,内置了多种效果的壁纸,滑动屏幕有动态效果。 Ditalix是一家集设计与定制心态的动态壁纸。折叠的形状刷和多点触摸手势在屏幕上轻点。 产品特点:★定期更新与自由...

    X Live Wallpaper X动态壁纸v3.7 高级版.zip

    《X Live Wallpaper X动态壁纸v3.7 高级版》是一个专为手机或平板设备设计的高级动态壁纸应用。该应用提供了丰富的个性化选项,让用户能够定制自己的桌面背景,为移动设备增添生动有趣的视觉效果。v3.7版本可能是该...

    Android 仿火萤视频桌面 神奇的LiveWallPaper

    Android 仿火萤视频桌面 神奇的LiveWallPaper

    Creating Android live wallpaper

    在Android平台上,动态壁纸(Live Wallpaper)是一种可以让用户自定义主屏幕背景的特殊类型的应用程序。它们不仅可以显示静态图像,还可以展示动态效果、交互式动画或者其他复杂视觉元素。本篇文章将深入探讨如何...

    Video Live Wallpaper_v1.4.1

    《Video Live Wallpaper_v1.4.1》是一款专为Android用户设计的动态壁纸应用,它提供了丰富的视频背景,让用户的手机桌面生动起来。这款软件在MIUI、FM、GALAXY以及EIMU等常见Android系统上都可以流畅运行,为用户...

    LiveWallpaper.apk

    LiveWallpaper.apk

    Android动态桌面LiveWallpaper源代码

    一个Android动态桌面源码,文件名LiveWallpaper,可以循环改变Android手机的待机桌面,选择一些漂亮的图片作为桌面,喜欢个性化的手机玩家,对此是想当热衷的,Android的自定义功能和桌面应用类软件也想当丰富,此...

    Infinity Live Wallpaper.apk

    Infinity Live Wallpaper.apk

    android -wallpaper (墙纸)

    1. **创建服务类**:首先,你需要继承`android.service.wallpaper.WallpaperService`并实现其接口。这个服务类是动态壁纸的核心,包含了壁纸的绘制逻辑和用户交互处理。 2. **实现Engine类**:在服务类中,你需要...

    Live Wallpaper-crx插件

    Live Wallpaper-crx插件正是为了满足这一需求而诞生,它允许用户将静态的桌面壁纸转变为生动有趣的动态画面,为日常的电脑使用增添了一份独特的视觉享受。 一、什么是Live Wallpaper-crx插件? Live Wallpaper-crx...

    Unity BitPaper Live Wallpaper 动态墙纸

    Unity BitPaper Live Wallpaper 动态墙纸,实现绚丽的动态墙纸

    TZM-Android-LiveWallpaper:时代精神运动动态壁纸为Android-开源

    “TZM-Android-LiveWallpaper”是一个专为Android系统设计的开源动态壁纸应用,其核心理念是融入了“时代精神运动”(Zeitgeist Movement)的理念。这款应用将艺术与技术完美结合,为用户的手机桌面带来生动且富有...

Global site tag (gtag.js) - Google Analytics