OPhone动态壁纸探究
转自:http://www.ophonesdn.com/article/show/278
OPhone动态壁纸探究
OPhone平台开发,2010-08-06 14:50:47
标签: 动态壁纸 Live Wallpapers 时间壁纸 TimeWall
随着三星Oscar的上市,流畅的操作,华丽的界面,OPhone 2.0的不俗表现不禁让人眼前一亮。作为OPhone 2.0一个新特性,动态壁纸(Live Wallpapers)为用户带来了更炫体验。本文主要通过一个完整的时间壁纸(TimeWall)为大家介绍如何开发 Live Wallpapers。还没开发环境?赶紧去下载OPhone SDK 2.0吧!
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.oms.LiveWall" android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <service android:label="@string/app_name" android:name=".TimeWall"
- 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/alive_wall" />
- </service>
- </application>
- <uses-sdk android:minSdkVersion="7" />
- </manifest>
- public class TimeWall extends WallpaperService {
- public Engine onCreateEngine() {
- return new TimeEngine();
- }
- public class TimeEngine extends Engine {
- // ...more code
- }
- }
- @Override
- public void onCreate(SurfaceHolder surfaceHolder) {
- super.onCreate(surfaceHolder);
- setTouchEventsEnabled(true);
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- mHandler.removeMessages(DRAW);
- }
- @Override
- public void onSurfaceCreated(SurfaceHolder holder) {
- super.onSurfaceCreated(holder);
- mHandler.sendEmptyMessage(DRAW);
- }
- @Override
- public void onSurfaceDestroyed(SurfaceHolder holder) {
- super.onSurfaceDestroyed(holder);
- mHandler.removeMessages(DRAW);
- }
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case DRAW:
- drawWall();
- break;
- }
- }
- };
- private void drawWall() {
- SurfaceHolder holder = getSurfaceHolder();
- Canvas canvas = holder.lockCanvas();
- drawTime(canvas);
- drawCross(canvas);
- holder.unlockCanvasAndPost(canvas);
- mHandler.removeMessages(DRAW);
- mHandler.sendEmptyMessageDelayed(DRAW, 50);
- }
附件代码:
- package com.OPhonesdn.timewall;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.os.Handler;
- import android.os.Message;
- import android.service.wallpaper.WallpaperService;
- import android.view.MotionEvent;
- import android.view.SurfaceHolder;
- public class TimeWall extends WallpaperService {
- public Engine onCreateEngine() {
- return new TimeEngine();
- }
- public class TimeEngine extends Engine {
- private final float STEP_X = 2f;
- private final float STEP_Y = 7f;
- private final float SCOPE_LEFT = 10f;
- private final float SCOPE_RIGHT = 110f;
- private final float SCOPE_TOP = 250f;
- private final float SCOPE_BOTTOM = 600f;
- private final float RADIUS = 20f;
- private final int DIRECTION_1 = 1; // move to right top side
- private final int DIRECTION_2 = 2; // move to right bottom side
- private final int DIRECTION_3 = 3; // move to left bottom side
- private final int DIRECTION_4 = 4; // move to left top side
- private final int DRAW = 1;
- private float mTouchX = -1f;
- private float mTouchY = -1f;
- private float mLocationX = 0f;
- private float mLocationY = 400f;
- private int mDirection = 1;
- private Paint mPaint = new Paint();
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case DRAW:
- drawWall();
- break;
- }
- }
- };
- public TimeEngine() {
- mPaint.setColor(Color.RED);
- mPaint.setAntiAlias(true);
- mPaint.setStrokeWidth(4);
- mPaint.setStrokeCap(Paint.Cap.BUTT);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setTextSize(40);
- }
- @Override
- public void onCreate(SurfaceHolder surfaceHolder) {
- super.onCreate(surfaceHolder);
- setTouchEventsEnabled(true);
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- mHandler.removeMessages(DRAW);
- }
- @Override
- public void onSurfaceCreated(SurfaceHolder holder) {
- super.onSurfaceCreated(holder);
- mHandler.sendEmptyMessage(DRAW);
- }
- @Override
- public void onSurfaceDestroyed(SurfaceHolder holder) {
- super.onSurfaceDestroyed(holder);
- mHandler.removeMessages(DRAW);
- }
- @Override
- public void onTouchEvent(MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_MOVE
- || event.getAction() == MotionEvent.ACTION_DOWN) {
- mTouchX = event.getX();
- mTouchY = event.getY();
- } else {
- mTouchX = -1;
- mTouchY = -1;
- }
- super.onTouchEvent(event);
- }
- private void drawWall() {
- SurfaceHolder holder = getSurfaceHolder();
- Canvas canvas = holder.lockCanvas();
- drawTime(canvas);
- drawCross(canvas);
- holder.unlockCanvasAndPost(canvas);
- mHandler.removeMessages(DRAW);
- mHandler.sendEmptyMessageDelayed(DRAW, 50);
- }
- private void drawTime(Canvas c) {
- Date date = new Date(System.currentTimeMillis());
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String strDate = sdf.format(date);
- c.save();
- c.drawColor(0xff000000);
- c.drawText(strDate, mLocationX, mLocationY, mPaint);
- switch (mDirection) {
- case DIRECTION_1:
- mLocationX = mLocationX + STEP_X;
- mLocationY = mLocationY - STEP_Y;
- if (mLocationY <= SCOPE_TOP) {
- mDirection = DIRECTION_2;
- }
- break;
- case DIRECTION_2:
- mLocationX = mLocationX + STEP_X;
- mLocationY = mLocationY + STEP_Y;
- if (mLocationX >= SCOPE_RIGHT) {
- mDirection = DIRECTION_3;
- }
- break;
- case DIRECTION_3:
- mLocationX = mLocationX - STEP_X;
- mLocationY = mLocationY + STEP_Y;
- if (mLocationY >= SCOPE_BOTTOM) {
- mDirection = DIRECTION_4;
- }
- break;
- case DIRECTION_4:
- mLocationX = mLocationX - STEP_X;
- mLocationY = mLocationY - STEP_Y;
- if (mLocationX <= SCOPE_LEFT) {
- mDirection = DIRECTION_1;
- }
- break;
- }
- c.restore();
- }
- private void drawCross(Canvas c) {
- if (mTouchX >= 0 && mTouchY >= 0) {
- c.drawLine(mTouchX - RADIUS, mTouchY, mTouchX + RADIUS,
- mTouchY, mPaint);
- c.drawLine(mTouchX, mTouchY - RADIUS, mTouchX,
- mTouchY + RADIUS, mPaint);
- }
- }
- }
- }
OPhone动态壁纸探究相关推荐
- CubeWallpaperSet动态壁纸探究
随着三星 Oscar的上市,流畅的操作,华丽的界面,OPhone 2.0的不俗表现不禁让人眼前一亮.作为OPhone 2.0一个新特性,动态壁纸(Live Wallpapers)为用户带来了更炫体验. ...
- Android中探究抖音短视频的动态壁纸功能以及拓展功能使用
一.前言 最近玩抖音感觉都快废了,所以我决定不玩了我要学习所以先从他的动态壁纸学起,因为整个应用中也就是动态壁纸有点好玩的技术,而且也就是抖音能做这个功能,其他的短视频或许做不了比如快手如果要做你觉得 ...
- android 动态壁纸
引用:http://www.ophonesdn.com/article/show/278 http://developer.android.com/resources/samples/CubeLive ...
- 动态壁纸,视频特效- Android
-- 动态壁纸 Android中模仿探究抖音短视频的动态壁纸功能以及动态壁纸的拓展功能使用- https://blog.csdn.net/jiangwei0910410003/article/deta ...
- win10动态壁纸怎么设置_想把我的女朋友设置为动态壁纸:看过来,教你啊
动态壁纸,最近已经越来越受用户的欢迎.炫酷的桌面效果非常动人,让人蠢蠢欲动,但有非常多的网友都不会设置win10动态桌面.所以今天小编就把设置win10动态桌面的方法告诉大家,下面就是设置win10动 ...
- Android自定义动态壁纸,Android自定义动态壁纸开发详解
看到有些手机酷炫的动态壁纸,有没有好奇过他们是如何实现的,其实我们自己也可以实现. 一.动态壁纸原理 如果你了解使用过SurfaceView的话,那么开发一款动态壁纸对你来说其实非常简单. 动态壁纸的 ...
- android 动态label,Android仿抖音实现动态壁纸
一.概述: 壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService.当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘 ...
- 动态壁纸安卓_安卓 高清 动态 壁纸
Hi,各位大佬好!我是此木: 昨天刚过完"2020520",今天女神要我给她换个好看的.高清的.动态的.安卓的手机壁纸,我勒个去,要求还真不高,于是乎此木埋头半小时,终于找到一款符 ...
- Live Wallpaper HD for Mac(天气动态壁纸软件)
Live Wallpaper HD for Mac是Mac平台上一款具有动态壁纸.详细天气预报.模拟时钟功能的天气动态壁纸软件,Live Wallpaper HD 中文破解版包含14张高清动态手机或电 ...
最新文章
- PyTorch入门与代码模板
- numpy.argwhere 返回的为索引值的array
- oracle创建分区表
- ML之LightGBM:基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度得分)
- 购物场景的对话流程如何实现?
- 并发编程之多线程基础-守护线程与非守护线程(四)
- The podfile
- 服务降级及dubbo中的实现示例
- jquery 文件预览功能
- java中filehandler_java – 如何配置特定FileHandler的属性
- ctfshow-WEB-web14( 利用数据库读写功能读取网站敏感文件)
- 中国大学MOOC-数据结构基础习题集、08-1、Talent and Virtue
- GRIDVIEW中实现上移下移的存储过程
- Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)
- 洛谷3678:简单的数学题(画柿子+杜教筛)
- iOS开发百度导航SDK的使用入门
- discourse 安装_如何使用Discourse在半天之内建立内部团队论坛
- golang官网可以打开了 go语言
- 查找Windows和MacBook序列号
- loadrunner在win7破解提示:Cannot save the license information because acceses to the registry is denied的解