zoukankan      html  css  js  c++  java
  • Android_动态壁纸介绍


    Android的动态壁纸主要用到三个类:

    android.app.WallpaperManager:这个类主要用于获取系统壁纸的信息。再写动态壁纸的时候用不到。

    android.service.wallpaper.WallpaperService:这个类作为服务在运行,同时负责产生一个Engine

    同时,在此类中有一个必须继承的方法为:nCreateEngineWallpaperServiceonCreateEngine这个方法比较特殊,虚拟机没有在WallpaperService里的onCreate方法里调用,更不用你自己在其它Activity里用startService或者bindService来启动它是在程序运行之后,由你在桌面上点击menu->Wallpaper->Live Wallpapers->确定->你的项目名称。这个时候虚拟机调用就会onCreateEngine方法。

    还有就是这个Service是什么时候启动的呢?看Manifest.xml文件就可以看出,在组件<service>里有一个<action android:name="android.service.wallpaper.WallpaperService" />这表明当你设置动态壁纸时这个Service才启动。

    android.service.wallpaper.WallpaperService.Engine:这个类是WallpaperService的内部类,负责动态壁纸的各个方面。

    介绍这个类里的几个函数

    onOffsetsChanged():
    这个一般在几个屏幕滑动的时候调用 而且 当你拖动A屏幕向B屏幕过度时 会随着B屏幕的显示面积的变大或者变小一直调用这个方法

    onVisibilityChanged()
    这个是屏幕显示或者不显示的时候调用的 必须完全覆盖屏幕才会调用

    onCommand()
    可以给壁纸发送一些命令 让其执行

    onTouchEvent()
    处理壁纸的点击时间的

    setTouchEventsEnabled(true)
    作用是使壁纸能响应touch event,默认是false 

    Engine的生命周期与大多数Android应用程序组件,比如activity类似,都是从onCreate()开始,在销毁时调用onDestory()方法。不同的是WallpaperService会提供一个surface用来绘制壁纸,所以在生命周期中多一个onSurfaceCreatedonSurfaceDestroyed的过程。下面是一个最简生命周期:

    这是AndroidManifest.xml文件中的一个配置信息,这个地方很重要。

        

    <application
    
            android:icon="@drawable/ic_launcher"
    
            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>
    

    <service> 定义了一个,将运行在背景上并且对事件有响应的Android服务。android:permission="android.permission.BIND_WALLPAPER意思是任何程     序调用我们的服务都需要有一个指定的权限。Android的Home程序已经具备了该权限,所以它会工作得很好。

     

    < intent-filter >这个标签告诉Android它是个什么样的服务。

    < meta-data>标签让它知道在哪能找到关于wallpaper的额外信息。android:resource被设为"@xml/wallpaper"(名字任意,但得对应上),这个值最好设置在res/xml/wallpaper.xml     文件

    现附上源代码,里面有详细解释供大家参考! (下载地址复制到地址栏里有效,单纯的点击不会跳到链接)

    csdn零分下载:http://download.csdn.net/detail/zqiang_55/4604044

    大家感觉文章不错,就帮忙顶下应用:http://www.talkphone.cn/Down/Soft/Detail/49172_0.html
     
  • 相关阅读:
    postgres column reference "id" is ambiguous
    网络 内网穿透frp
    odoo12 支付宝在线支付
    odoo 账号登录不上,重置密码也不管用
    odoo 取消保存提示
    聊聊redis分布式锁的8大坑 转载
    用 Keepalived+HAProxy 实现高可用负载均衡的配置方法 转载
    Nginx+keepalived 实现高可用,常用防盗链及动静分离配置 转载
    Git 实用技巧记录 转载:https://mp.weixin.qq.com/s/o6FvGfiG9b57xTeXlBzzQQ
    5 个冷门但非常实用的 Kubectl 使用技巧,99% 的人都不知道 https://mp.weixin.qq.com/s/h4_KRmsVSnlqCmIJh0altA
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300653.html
Copyright © 2011-2022 走看看