开发实时壁纸

2024-05-07 03:58
文章标签 开发 实时 壁纸

本文主要是介绍开发实时壁纸,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

所谓实时壁纸,即动态壁纸,就是手机桌面不再是简单的图片,而是运行中的动画,该动画由程序实时绘制的,所以称为实时壁纸。Android中提供WallpaperService基类来开发实时壁纸,步骤如下:

下面用一个示例来演示,该示例原型来源于疯狂讲义一书,代码如下:

WallpaperService的子类:LiveWallpaper

package com.home.service;import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.view.MotionEvent;
import android.view.SurfaceHolder;public class LiveWallpaper extends WallpaperService {// 继承WallpaperService必须实现的抽象方法@Overridepublic Engine onCreateEngine() {// 返回自定义的Enginereturn new MyEngine();}class MyEngine extends Engine {private int ScreenWidth;private int ScreenHeight;// 记录程序界面是否可见private boolean mVisible;// 记录当前用户事件的发生位置private float mTouchX = -1;private float mTouchY = -1;// 记录当前圆圈的绘制位置private float cx = 15;private float cy = 15;// 定义画笔private Paint mPaint = new Paint();// 定义一个HandlerHandler mHandler = new Handler();// 定义一个周期性执行的任务private final Runnable drawTarget = new Runnable() {@Overridepublic void run() {drawFrame();}};public void onCreate(android.view.SurfaceHolder surfaceHolder) {super.onCreate(surfaceHolder);// 获得屏幕宽和高ScreenWidth = getDesiredMinimumWidth() / 2;ScreenHeight = getDesiredMinimumHeight();// 初始化画笔mPaint.setColor(0xffffffff);mPaint.setAntiAlias(true);mPaint.setStrokeWidth(2);mPaint.setStrokeCap(Paint.Cap.ROUND);mPaint.setStyle(Paint.Style.STROKE);// 设置处理触摸事件setTouchEventsEnabled(true);}@Overridepublic void onDestroy() {super.onDestroy();// 删除回调mHandler.removeCallbacks(drawTarget);}@Overridepublic void onVisibilityChanged(boolean visible) {mVisible = visible;// 当界面可见时,执行drawFrame()方法if (mVisible) {// 动态绘制图形drawFrame();} else {// 如果界面不可见,删除回调mHandler.removeCallbacks(drawTarget);}}@Overridepublic void onOffsetsChanged(float xOffset, float yOffset,float xOffsetStep, float yOffsetStep, int xPixelOffset,int yPixelOffset) {drawFrame();}// 当屏幕大小改变时调用该方法@Overridepublic void onSurfaceChanged(SurfaceHolder holder, int format,int width, int height) {super.onSurfaceChanged(holder, format, width, height);drawFrame();}@Overridepublic void onSurfaceDestroyed(SurfaceHolder holder) {super.onSurfaceDestroyed(holder);mVisible = false;mHandler.removeCallbacks(drawTarget);}@Overridepublic void onTouchEvent(MotionEvent event) {// 如果检测到滑动操作if (event.getAction() == MotionEvent.ACTION_MOVE) {mTouchX = event.getX();mTouchY = event.getY();} else {mTouchX = -1;mTouchY = -1;}super.onTouchEvent(event);}/*** 定义绘制图形的工具方法*/private void drawFrame() {// 获取该壁纸的SurfaceHolder对象final SurfaceHolder holder = getSurfaceHolder();Canvas c = null;try {// 对画布加锁c = holder.lockCanvas();if (c != null) {c.save();// 绘制背景色c.drawColor(0xff000000);// 在触碰点绘制圆圈drawTouchPoint(c);// 绘制圆圈c.drawCircle(cx, cy, 80, mPaint);c.restore();}} finally {if (c != null) {holder.unlockCanvasAndPost(c);}}mHandler.removeCallbacks(drawTarget);// 调度下一次重绘if (mVisible) {cx += 15;cy += 20;// 如果cx、cy移出屏幕,从左上角重新开始if (cx >= ScreenWidth - 80) {cx = 15;}if (cy >= ScreenHeight - 80) {cy = 20;}// 指定0.1秒后重新执行一次drawTargetmHandler.postDelayed(drawTarget, 100);}}/*** 在屏幕触碰点绘制圆圈* * @param canvas*/private void drawTouchPoint(Canvas canvas) {if (mTouchX >= 0 && mTouchY >= 0) {canvas.drawCircle(mTouchX, mTouchY, 40, mPaint);}}}
}

配置LiveWallpaper:

        <serviceandroid:name="com.home.service.LiveWallpaper"android:permission="android.permission.BIND_WALLPAPER" ><intent-filter><action android:name="android.service.wallpaper.WallpaperService" /></intent-filter><meta-data android:name="android.service.wallpaper"android:resource="@xml/mywallpaperxml"/></service>

mywallpaperxml:

<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/wallpaper_des"android:thumbnail="@drawable/ic_launcher">
</wallpaper>

权限:

 <!-- 加入设置壁纸权限 --><uses-permission android:name="android.permission.SET_WALLPAPER" />





 

这篇关于开发实时壁纸的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966259

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧