抖音文字时钟壁纸html源码,这次要把抖音网红文字时钟设置为壁纸了~
原标题:这次要把抖音网红文字时钟设置为壁纸了~
本文作者
作者:二娃_
https://juejin.im/post/5d52aea86fb9a06ae61aad5b
还记得上篇吗?我们先实现了抖音网红文字时钟的自定义 View 实现:
抖音上炫酷的网红文字时钟
1
概述
源码地址
https://github.com/drawf/SourceSet/blob/master/app/src/main/java/me/erwa/sourceset/view/TextClockWallpaperService.kt
2
起源
填坑啦!填坑啦!
其实关于「设置动态壁纸的实操」我是弃坑了的,因为我单方面觉得只是壁纸相关API的使用,价值不大。但不久前有「掘友」留言说及这事,并表示期待更新「下篇」,于是我又单方面觉得价值还是有的,能帮一个是一个。
目录
以下是我列的本篇目录,将按顺序依次做解说
如何快速上手设置壁纸?
相关API说明
文字时钟动态壁纸实践
如何快速上手设置壁纸?
NOTE: 这里暂时不关心「为什么」,我们只按照既定的步骤,快速上手实现一个「Hong Kong is part of China!」静态壁纸
1. 在res -> xml目录下新建一个壁纸描述文件,名字可自取(text_colck_wallpaper.xml),内容很简单
2. 继承WallpaperService在内部处理我们自己的绘制。(可以关注下onVisibilityChanged方法)
classTextClockWallpaperService: WallpaperService{
overridefunonCreateEngine: Engine {
returnMyEngine
}
inner classMyEngine: Engine{
/**
* 准备画笔
*/
privatevalmPaint = Paint.apply {
this.color = Color.RED
this.isAntiAlias = true
this.textSize = 60f
this.textAlign = Paint.Align.CENTER
}
/**
* 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)。
*/
overridefunonVisibilityChanged(visible: Boolean){
super.onVisibilityChanged(visible)
Log.d( "clock", "onVisibilityChanged >>> $visible")
//只在壁纸显示的做绘制操作,这很重要!
if(visible) {
surfaceHolder.lockCanvas?.let { canvas ->
//将原点移动到画布中心
canvas.save
canvas.translate((canvas.width / 2).toFloat, (canvas.height / 2).toFloat)
//绘制文字
canvas.drawText( "Hong Kong is part of China!", 0f, 0f, mPaint)
canvas.restore
surfaceHolder.unlockCanvasAndPost(canvas)
}
}
}
}
}
3. 在AndroidManifest.xml文件中增加壁纸服务的声明
android:name=".view.TextClockWallpaperService"
android:permission="android.permission.BIND_WALLPAPER">
android:name="android.service.wallpaper"
android:resource="@xml/text_clock_wallpaper"/>
4. 增加启动壁纸设置服务的方法
btnSet.setOnClickListener {
val intent = Intent.apply {
action = WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER
putExtra(
WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
ComponentName(
context,
TextClockWallpaperService:: class.java
)
)
}
startActivity(intent)
}
经过前面四步,我们成功的爱了一把国,效果如图:
3
相关API说明
壁纸描述文件
首先,这个描述文件是必须的,在声明服务的时候必须在meta-data上配置上。知道为什么吗?
1. 这个描述文件中有三个可选属性deion(对壁纸服务的描述) settingsActivity(对此壁纸进行参数设置的Activity) thumbnail(壁纸服务缩略图)
//示例代码
android:deion="@string/deion"
android:settingsActivity="me.erwa.xxx.SettingsActivity"
android:thumbnail="@mipmap/ic_launcher">
2. 通过源码可知,在壁纸服务启动之前会进行三个检查,其中第三个检查就是对meta-data中提供关于壁纸的描写叙述信息的检查用以创建一个叫WallpaperInfo的实例。(关于原理部分解析,我在拜读的文章中贴出了链接,大家可自行食用)
壁纸服务的声明
其中必须要加的是:
1. 权限:android:permission="android.permission.BIND_WALLPAPER"
2. 处理Service的Action:
对!这两个也分别对应壁纸服务启动前的第一个检查和第二个检查
壁纸服务的实现
1. 继承WallpaperService并复写抽象方法public abstract Engine onCreateEngine;
/**
* 必须实现并返回一个壁纸引擎的新实例。
* 注意同一时间可能有多个实例在运行,比如当前壁纸正在运行时,用户在挑选壁纸页面浏览该壁纸的预览画面。
*/
publicabstractEngine onCreateEngine();
/**
* 壁纸的实际实现。一个壁纸服务可能有多个实例在运行(例如一个是真实的壁纸和一个处于预览的壁纸),
* 每个壁纸都只能由其相应的引擎实例来做实现。
* 你必须实现{@link WallpaperService#onCreateEngine}并返回你创建的引擎的实例。
*/
publicclassEngine{
...省略代码
}
2. Engine的关键生命周期,它们是从上到下依次执行的。我们重点关注onVisibilityChanged onSurfaceDestroyed即可。
inner classMyEngine: Engine{
overridefunonCreate(surfaceHolder: SurfaceHolder?){
super.onCreate(surfaceHolder)
Log.d( "clock", "onCreate")
}
overridefunonSurfaceCreated(holder: SurfaceHolder?){
super.onSurfaceCreated(holder)
Log.d( "clock", "onSurfaceCreated")
}
overridefunonSurfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int){
super.onSurfaceChanged(holder, format, width, height)
Log.d( "clock", "onSurfaceChanged")
}
/**
* 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)。
*/
overridefunonVisibilityChanged(visible: Boolean){
super.onVisibilityChanged(visible)
Log.d( "clock", "onVisibilityChanged >>> $visible")
}
overridefunonSurfaceDestroyed(holder: SurfaceHolder?){
super.onSurfaceDestroyed(holder)
Log.d( "clock", "onSurfaceDestroyed")
}
overridefunonDestroy{
super.onDestroy
Log.d( "clock", "onDestroy")
}
}
3. 绘制相关的API
/**
* 提供对绘制壁纸时实际Surface(表面)的访问
*/
publicSurfaceHolder getSurfaceHolder{
returnmSurfaceHolder;
}
/**
* 开始在Surface上编辑像素。这个返回的画布可以用来在Surface的位图上绘制。如果Surface还没创建或者不能被编辑会返回null。
* 一般情况下,你需要通过实现{@link Callback#surfaceCreated Callback.surfaceCreated}这个方法,
* 来得知surface什么时候可用。
*
* Surface的内容在unlockCanvas和lockCanvas之间是不会保存的,因此,Surface区域必须写入每个像素。
* 这个规则有个例外就是指定一个特殊的脏矩形区域,这种情况下,非脏区域的像素才会被保存。
*
* 如果你在Surface创建前或销毁后重复调用该方法,为了避免占用CPU,你的调用将被限制为慢速率。
* 如果返回值不为null,该方法内部持有锁,直到相应的{@link #unlockCanvasAndPost}方法被调用,并会防止Surface
* 在绘制时被创建、销毁或修改。这样比直接访问Surface更方便,因为你不需要在{@link Callback#surfaceDestroyed
* Callback.surfaceDestroyed}和绘制线程中做特殊的同步。
* 返回一个用来绘制到Surface上的画布
*/
publicCanvas lockCanvas;
/**
* 完成Surface上像素的编辑。该方法调用完,Surface上的像素将会展示到屏幕上,但是它的内容会丢失,
* 尤其再次调用lockCanvas时也不能保证它的内容不会变动。
*
* 参数需传入之前lockCanvas返回的画布
*/
publicvoidunlockCanvasAndPost(Canvas canvas);
4
文字时钟动态壁纸实践
有了前面的铺垫,这部分就相对简单了。不过我们依旧先思考
抖音文字时钟壁纸html源码,这次要把抖音网红文字时钟设置为壁纸了~相关推荐
- [附源码]计算机毕业设计Node.js特色网红小吃网站(程序+LW)
项目运行 环境配置: Node.js最新版+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue. 项目技术: Express框架 + Node.js+ Vue 等 ...
- android浪漫樱花凋零动态壁纸应用源码
android浪漫樱花凋零动态壁纸应用源码,是从那个安卓教程网拿过来的,本项目是一套基于安卓的樱花动态壁纸项目源码,安装以后桌面没有图标,但是可以在修改壁纸-动态壁纸中找到.我的分辨率是480×854 ...
- wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑
wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~ 错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了 ...
- wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑
wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~ 错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...
- 抖音文字时钟壁纸html,网红文字时钟怎么弄 抖音网红文字时钟主题壁纸设置教程...
类型:桌面主题大小:54KB语言:中文 评分:10.0 标签: 立即下载 最近很多小伙伴在抖音上看到了网红文字时钟主题壁纸,很有意思,自己也想要制作这种的,网红文字时钟怎么弄,西西小编为大家带来抖音网 ...
- 【自定义View】抖音网红文字时钟-上篇
源码地址 抖音网红文字时钟-TextClockView 起源 周末在家刷抖音的时候看到了这款网红时钟,都是Android平台的,想来何不自己实现一把.看抖音里大家发的视频,这款时钟基本分两类,一类是展 ...
- 简洁优雅抖音在线qu水印HTML源码
介绍: 简洁优雅抖音在线qu水印HTML源码,虽然简约,但不失优雅! 网盘下载地址: http://kekewangLuo.net/xKJM6gpwA8s 图片:
- 价值4500的国际版多语言点赞抖音分享点赞任务平台源码(十二种语言)
介绍: 平台会员分享给我的,他自己搭建成功了,测试可用!我就不测试了,需要的拿! 九种语言 :西班牙语,泰语.日语,印度尼西亚语言.越南语言.英文.繁体中文,简体中文,印度语 前台支持更换5种颜色风格 ...
- php 记事本源代码_抖音无水印解析PHP源码
抖音无水印解析PHP源码 仅限学习使用 输出为标准的格式化json数据 ajax直接调用即可 原生的ajax的调用方法看底部 $url = @$_GET['url']; if (strstr($url ...
最新文章
- Djkastra堆(手写堆)优化版
- 好程序员Web前端教程分享Vue学习心得
- 第八章 Python类中常用的特殊变量和方法
- BZOJ 1051 受欢迎的牛(Tarjan缩点)
- weblogic从入门到起飞!(域模块、扩展模块)(三)
- oracle调试死掉,oracle自动死掉了
- 给后辈的一点建议,分享PDF高清版
- 解决:Field xxMapper in xx.service.impl.xxServiceImpl required a bean of type ‘xx.mapper.xxMapper‘
- 创建线程的两种方式:继承Thread类和实现Runnable接口
- Diino - 具有自动数据备份功能的国外2G免费网络硬盘
- vue-cli 体验
- optisystem中bit rate等全局参数的意义
- git 2.15下载 git 2.18下载 windows 64位
- swagger ui 怎么输入对象_java swagger ui 添加header请求头参数的方法
- 自动杀死yarn 中运行的程序
- 关于工控安全什么是设备加密?
- 文献综述撰写格式及写作技巧
- [Hexo]Hexo+github搭建静态博客
- uni-app 系统打印、AirPrint、支持ipad、打印图片 pdf webView文档
- 三种合并请求的方式帮提高接口性能