一、前言
最近抖音(抖音)游戏快废了,所以决定不玩了。因为要学习,所以要先学动态壁纸。因为在整个应用程序中,动态壁纸是一项有趣的技术,另外,抖音(抖音)可以发挥功能。其他短视频好像不能很快做好。例如,我想我得快点。如果有几个人用壁纸双击卢哲666这样的视频。因为抖音(抖音)里的小姐姐用壁纸的可能性很大。
其实动态壁纸在Android中早就用到了,之前说的很神奇的透明屏幕其实可以用动态壁纸来做:二、使用方法
但是先不说这个,先把抖音的动态壁纸功能说一下吧,在Android中开发动态壁纸其实很简单,只需要两步就可以了:
第一步:定义一个动态壁纸服务
继承系统壁纸服务类,然后在回调方法中创建一个引擎返回即可。关于引擎后面会说。
第二步:在XML中声明服务
这里需要声明权限以及定义壁纸的额外附属信息,比如壁纸的预览图片等。
然后我们需要启动系统设置壁纸的页面:
这样我们就完成了所以设置操作了,所以接下来就需要在上面的那个引擎中进行操作了,我们还是回到抖音中查看他是如何做到的,这样的跟踪就简单了,直接去他的xml中搜索那个权限:
找到这个类之后,直接去Jadx中去搜索:
找到创建的回调方法中,然后点进去进行查看:
三、方法说明
看到这里就明白了,他是会把当前视频下载下来,然后结合MediaPlayer来进行操作的,而播放载体的SurfaceHolder就来自于引擎回调方法,接下来详细看看引擎有哪些重要的方法:
第一个方法:getSurfaceHolder
获取当前动态壁纸展示的SurfaceHolder,这个类型相信大家弄过视频都对这个不陌生了,如果有了SurfaceHolder作为渲染载体我们可以自己手动画画,用摄像头,播放视频等操作了。所以这个方法是多么至关重要。
第二个方法:onSurfaceCreated
渲染创建的时候也就是壁纸启动的时机,所以一般初始化操作都会在这里做,比如上面的抖音设置视频准备工作就在这里做的。这个方法是个回调方法,可以获取到SurfaceHolder变量。
第三个方法:onTouchEvent
这个方法其实不陌生了,就是触摸事件,我们如果在对手指触摸屏幕的时候需要做一些事情的时候可能需要在这里记录触摸的坐标信息进行后面操作。
第四个方法:onOffsetsChanged
这个方法是在壁纸滑动的时候位置变化回调,这个对于做动态壁纸特效用的会比较多,现在市面上不是有很多酷炫的3D壁纸效果,其实这个方法必不可少。
第五个方法:onVisibilityChanged
这个方法非常重要,他表示当前壁纸是否可见,比如在桌面上点击应用图标进入应用的时候这时候壁纸就不可见了,我们可以暂停一些事情,当我们按返回键或者home键回到桌面的时候壁纸又可见了,这时候我们在继续做一些事情。
第六个方法:onSurfaceDestroyed
这个方法和之前的创建方法对应就是销毁的时候我们需要释放资源操作。
四、案例操作
第一、实现视频动态壁纸
主要就是这几个方法非常关键,下面我们就用三个场景来看看动态壁纸的玩法,首先第一个把抖音的视频做成动态壁纸功能实现了,其实很简单,这里就模拟本地一个视频,直接用MediaPlayer类进行操作,把视频展示在引擎的SurfaceHolder上即可:
因为有了壁纸的SurfaceHolder,结合MediaPlayer就可以直接操作了。没有任何难度,我们可以在壁纸可见和不可见的时候暂停播放视频。看看效果图:
第二、自定义绘画动态壁纸
因为了有了SurfaceHolder,我们可以获取到画布,然后随便在上面涂鸦操作,这里结合触摸点事件进行操作
每次触摸壁纸就在画布上画一个圆圈,当然有了画布和画笔你想怎么涂都可以。看看效果图:
第三、用摄像头拍摄制作动态壁纸
因为之前开发过摄像头的知道,摄像头采集到的数据也是需要展示出来的,那么这里也是展示到一个SurfaceHolder即可:
这样我们就可以做了之前说的透明壁纸了。也可以对摄像头的每一帧数据进行处理比如美颜等看到不同的效果。看看效果图:
第四、结合OpenGL做酷炫桌面
这个这里不在弄了,因为大家懂得OpenGL还是很麻烦的,但是都需要借助SurfaceHolder的,我们看一下市面上的一个3D效果桌面动态壁纸:
四、技术延伸
好了到这里我们就说完了Android中动态壁纸的几种玩法了,其实很简单,实现系统服务返回自己的引擎,在引擎回调中难道当前壁纸的SurfaceHolder,有了这玩意就可以做很多事了,当然这里最好了解一下Android中的视频开发,之前其实已经开设了一个专栏详细介绍了视频开发知识,可以去我的网站搜索,一张神图总结如下:
如果看懂这样图其实还有很多东西可以做,具体的就留给感兴趣的同学去做吧。
最后在来说一下为啥系统设置壁纸还需要权限呀?其实这里有一个问题如果没有权限那么用户的桌面就会被滥用,比如恶意者可以制作一个视频或者绘画一些信息比如这里暂时广告信息,然后在后台偷偷的设置了壁纸,这样用户的桌面就变成了广告了,这样用户也会疯掉的。所以权限是肯定要有的。但是Android始终是Android,安全性的确和iOS没法比,我们通过抖音就可以看到Android版本下载之后直接就跳转到设置壁纸页面了,这样用户体验的确很好但是安全性其实不怎么好,而iOS下载完之后会提示你自己去系统设置页面进行设置壁纸操作:
这个细微的差距可以看到Android系统给出什么开发权限,iOS给出什么样的开发权限,个人看来偏向于iOS越安全越好。
喜欢小编的可以给小编点点关注