掉小猫的功能实现了,思路是,每隔一段时间,产生一堆小猫,放到链表中,再不断地去重绘这些小猫,小猫离开屏幕了,就把小猫从链表中赶走。
先看动态效果图
主要的代码,其余的配置跟Live Wallpaper一是一样的
public class MyWallpaperService extends WallpaperService { @Override public Engine onCreateEngine() { return new MyEngine(); } class MyEngine extends Engine { private Handler h = new Handler(); private int screenWidth; private int screenHeight; private Paint p; private Canvas c; private Bitmap bg; private ArrayList<Cat> cats; private int time = 60; private int timer = 0; // 用一个线程来处理绘制动态壁纸的过程 Runnable dThread = new Runnable() { @Override public void run() { createCats(); drawWallpaper(); } }; /* * 工具方法,用于将raw中的资源转化成Bitmap类型 */ private Bitmap loadBitmap(int id) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id); return bitmap; } private void drawWallpaper() { SurfaceHolder holder = getSurfaceHolder(); c = holder.lockCanvas(); if (c != null) { c.drawBitmap(bg, 0, 0, p);// 画出背景 //循环遍历数组,不断地重绘产生的猫咪 for (Cat it : cats) { it.drawCat(c); } holder.unlockCanvasAndPost(c); } h.postDelayed(dThread, 20); } private void createCats() { // 画出动态的猫咪,这里timer跟time也是为了让这段产生小猫的代码不断的执行,同时也不妨碍赶走小猫 timer++; if (timer >= time) { int px = (int) (Math.random() * screenWidth); Cat cat1 = new Cat(loadBitmap(R.drawable.p_01)); // Cat cat2 = new Cat(loadBitmap(R.drawable.p_02)); Cat cat3 = new Cat(loadBitmap(R.drawable.p_03)); if (cat1 != null) { cat1.drawCat(c); cat1.setPosition(px, 0); cats.add(cat1); } /* * px = (int) (Math.random() * screenWidth); * * if (cat2 != null) { cat2.drawCat(c); cat2.setPosition(px, 0); * cats.add(cat2); } */ px = (int) (Math.random() * screenWidth); if (cat3 != null) { cat3.drawCat(c); cat3.setPosition(px, 0); cats.add(cat3); } timer = 0; } //记得把超出屏幕的猫咪赶走 for (int i = 0; i < cats.size(); i++) { if (cats.get(i).positionY > screenHeight) { cats.remove(i); } } } public MyEngine() { p = new Paint(); p.setColor(Color.RED); p.setAntiAlias(true); p.setStyle(Style.STROKE); p.setStrokeWidth(3); p.setTextSize(30); bg = loadBitmap(R.drawable.bg1); cats = new ArrayList<MyWallpaperService.Cat>(); } @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); } @Override public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (width > 0 && height > 0) { this.screenWidth = width; this.screenHeight = height; } super.onSurfaceChanged(holder, format, width, height); } @Override public void onVisibilityChanged(boolean visible) { super.onVisibilityChanged(visible); if (visible) { h.postDelayed(dThread, 20); } 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); } @Override public void onTouchEvent(MotionEvent event) { super.onTouchEvent(event); h.postDelayed(dThread, 20); } } /** * 用一个类来封装猫咪图片的信息 * */ public class Cat { Bitmap sourceBitmap; int positionX = 0;// 图片上角的X坐标 int positionY = 0;// 图片左上角的Y坐标 // 设置猫咪图片的位置 public void setPosition(int x, int y) { positionX = x; positionY = y; } public Cat(Bitmap bitmap) { sourceBitmap = bitmap; } // 画猫咪图片 public void drawCat(Canvas canvas) { if (sourceBitmap != null) { canvas.drawBitmap(sourceBitmap, positionX, positionY, null); } nextFrame(); } // 下一帧 public void nextFrame() { positionY += 1; } } }
虽然有密集恐惧症,可是看到猫咪的图片不会,果然是萌物啊
传送门:
http://zhujiao.iteye.com/blog/1537528
相关推荐
Wallpaper Engine:壁纸引擎.url
LiveWallpaper Live Wallpaper App using OpenGL ES 2.0
在Android平台上,动态壁纸(Live Wallpaper)是一种可以让用户自定义主屏幕背景的高级功能,它不仅限于静态图片,还能展示动画或者交互式效果。本压缩包提供的"两个Android 动态壁纸 Live Wallpaper-...
Android动态壁纸,或者说“Live Wallpaper”,是Android操作系统中一种特殊的应用类型,允许用户将动态、交互式的背景设置为手机或平板电脑的主屏幕壁纸。这种壁纸不仅提供了静态图像的视觉体验,还可以根据用户的...
在Android系统中,动态桌面(Live Wallpapers)是一种可以为用户提供动态视觉效果的壁纸类型,与静态壁纸不同,它可以展示动画、3D图形或其他交互式元素。本教程将深入探讨如何制作Android动态壁纸,主要围绕以下几...
- 创建一个XML文件(通常命名为`wallpaper.xml`),放置于`res/xml/`目录下。 - 在此文件中定义壁纸的基本信息,如缩略图、描述文本和设置活动。 4. **绘制壁纸**: - 在`Engine`类中重写`onDraw()`方法来绘制...
桌面插件 Ditalix Live Wallpaper Suite 1.2.3.10-华丽动态壁纸集合 ICON:软件icon 软件名称:Ditalix Live Wallpaper Suite 软件版本:1.2.3.10~华丽动态壁纸集合 软件大小:31.27M 软件语言:英文 支持平台:...
Android 仿火萤视频桌面 神奇的LiveWallPaper
在Android平台上,动态壁纸(Live Wallpaper)是一种可以让用户自定义主屏幕背景的特殊类型的应用程序。它们不仅可以显示静态图像,还可以展示动态效果、交互式动画或者其他复杂视觉元素。本篇文章将深入探讨如何...
《X Live Wallpaper X动态壁纸v3.7 高级版》是一个专为手机或平板设备设计的高级动态壁纸应用。该应用提供了丰富的个性化选项,让用户能够定制自己的桌面背景,为移动设备增添生动有趣的视觉效果。v3.7版本可能是该...
“TZM-Android-LiveWallpaper”是一个专为Android系统设计的开源动态壁纸应用,其核心理念是融入了“时代精神运动”(Zeitgeist Movement)的理念。这款应用将艺术与技术完美结合,为用户的手机桌面带来生动且富有...
《Video Live Wallpaper_v1.4.1》是一款专为Android用户设计的动态壁纸应用,它提供了丰富的视频背景,让用户的手机桌面生动起来。这款软件在MIUI、FM、GALAXY以及EIMU等常见Android系统上都可以流畅运行,为用户...
LiveWallpaper.apk
本文将深入探讨Android系统中的墙纸功能,以及如何利用Android SDK进行LiveWallpaper的开发。 首先,Android壁纸分为静态壁纸和动态壁纸两种。静态壁纸是常见的图片形式,用户可以从本地相册选择或下载网络上的图片...
Android 端强大的动态壁纸管理器 :sparkles: 特性 :check_mark_button: 使用 Flutter 开发 :globe_showing_Americas: 支持 HTML 、URL 作为 Android 壁纸 :television: 支持视频作为 Android 壁纸 :hammer_and_...
一个Android动态桌面源码,文件名LiveWallpaper,可以循环改变Android手机的待机桌面,选择一些漂亮的图片作为桌面,喜欢个性化的手机玩家,对此是想当热衷的,Android的自定义功能和桌面应用类软件也想当丰富,此...