专栏名称: 开发者全社区
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
鸿洋  ·  安卓应用跳转回流的统一和复用 ·  2 天前  
鸿洋  ·  一文搞懂Window、PhoneWindow ... ·  3 天前  
郭霖  ·  使用Hilt来协助封装网络请求 ·  6 天前  
郭霖  ·  Android 跨进程+解耦的数据持久化方案 ·  1 周前  
51好读  ›  专栏  ›  开发者全社区

告诉你如何实现Android视频桌面:神奇的Android LiveWallPaper

开发者全社区  · 公众号  · android  · 2017-07-09 09:41

正文


热文导读 | 点击标题阅读

电子书免费下载!阿里重磅推荐,Android高级进阶必备:《深入理解Android热修复技术原理》

吊炸天!74款APP完整源码!

【建议收藏】andriod 资源大全

原文:http://aidecn.cn/?p=10112

注:本文的测试机为小米5s ,可能不同手机会有一些兼容性问题,尝试解决下。


1.实现效果

前段时间基本被一款叫火萤视频桌面的软件(就是将视频作为桌面)给刷屏了,所以看了下作者的代码,看到了SurfaceHolder,立刻想到了,肯定可以用来播放视频实现视频桌面的效果,于是周末尝试了下,果然很简单。


所以本篇文章无限感谢Android 实现"透明屏幕"一文,代码也部分参考自其提供的透明相机。


  • https://github.com/songixan/Wallpaper


效果图是这样的:



2.具体实现

(1) 配置相关


首先编写一个xml文件,用于描述wallpaper的thumbnail、description、settingsActivity等,这里为了简单,仅设置了thumbnail。




(2)编写代码


Wallpaper需要在屏幕上一直显示,其背后其实是一个Service,所以实现一个Wallpaper需要继承自`WallpaperService`,实现其抽象方法`onCreateEngine`,如下:



可以看到返回值是一个Engine,Engine为WallpaperService的内部类,其内部包含`onSurfaceCreated`、`onSurfaceChanged`、`onSurfaceDestroyed`、`onTouchEvent`等方法,看到这些方法,立刻想到了SurfaceView。


此外,大家还记得在Android播放视频吗?


常规的做法有通过VideoView,除此以外还有通过MediaPlayer配合SurfaceView配合来实现,今天这个例子类似后者。


我们只需要通过MediaPlayer将解码的数据不断的输送到传入的Surface中即可。


代码非常简单,在onSurfaceCreated中去初始化mMediaPlayer,核心代码即为设置setSurface方法,这里我默认设置了静音。

onVisibilityChanged,即当桌面不可见时,我们要暂停播放,等回到桌面继续。

当onSurfaceDestroyed时释放资源~~

这样我们的VideoLiveWallpaper就写好了,别忘了他是个Service,需要我们去注册。



(3)设置为壁纸


注册完成后,我们在MainActivity中添加一个按钮点击设置为桌面背景,调用代码如下



这样就完成了代码的初步编写啦~~


(4)增加一些参数的支持


刚才我们设置了默认是静音,可能有时候我们会希望能够动态去控制视频桌面的参数,正常应该尝试去使用`settingsActivity `,不过我觉得其实广播也挺合适的,无非就是Service(可能在独立的进程)和Activity等通信嘛~~


这里我们增加一个复选框,支持设置开启声音or关闭声音。


Engine还有onCreate和onDestroy声明周期方法,可以在onCreate中注册动态广播,当接受到发送的action为`ACTION_VOICE_NORMAL `则开启声音;接收到发送的`ACTION_VOICE_SILENCE `则为静音状态。

最后直接在VideoLiveWallpaper中添加两个静态方法用于发送广播即可:



在Actiivty中:



监听一下CheckBox状态,发送广播即可。

ok,这样一个简单的视频桌面就完成啦~~


源码地址:  https://github.com/WanAndroid/LiveWallPaper/tree/master/hongyang/MagicWallPaper

直接将这个目录以项目形式导入。

参考

  • http://www.vogella.com/tutorials/AndroidLiveWallpaper/article.html

  • http://www.jianshu.com/u/befb61deec9c

源码及Demo下载点击阅读原文

看完本文有收获?请分享给更多人

更多学习资料点击下面的“阅读原文”获取


Java和Android架构

欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。搜索微信公众号:JANiubility。

公众号:JANiubility