安卓4.0.4手机系统增加百分比电量及说明
2012-12-07 09:09
429 查看
网上关于修改精确百分比电量的帖子多如牛毛,但都过于笼统,授人以鱼不如授人以渔,我再来说上一说
许多教程里写的修改“framework-res.apk”是2.x时代的老黄历了,进入4.0以后我们可以直接修改“systemui.apk”来增加百分比电量
反编译后,
要修改的两个文件在“\res\drawable”下,“stat_sys_battery.xml”和“stat_sys_battery_charge.xml”,前者是根据当前电量显示图标,后者是根据充电电量显示图标。
因为已经有前辈为我们写好,所以可以直接拿来替换掉原版里的文件。然后将你选择的200个图标(100个当前电量+100个充电电量)复制到“\res\drawabledrawable-hdpi”目录(480x800分辨率可以使用这个hdpi目录,手机分辨率低的可能要复制到mdpi下)。图标名称要参考上述2个文件。
反编译后将生成apk中的“resources.arsc”和“res目录”以储存方式替换到原systemui.apk中,这样就基本完成了。
现在我来解释一下
“stat_sys_battery.xml”
650) this.width=650;" style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" title="图像 017" border="0" alt="图像 017" src="http://yiyangde7.blog.51cto.com//attachment/201212/4/392692_1354600258Tau7.jpg"
"759" height="158" />
省略……
xml中使用了<level-list>标签,Android会根据level的值自动选择对应的图片
实际上反过来写更清楚些 <item android:maxLevel="0" android:drawable="@drawable/stat_sys_battery_0" />
当电量为零时(用maxLevel="0"表示),显示图片资源(用drawable表示)drawable/stat_sys_battery_0。
图片使用png格式,实际为“stat_sys_battery_0.png”。无指定路径,系统会根据手机分辨率自动选择hdpi目录或者是mdip等目录中的文件。
“stat_sys_battery_charge.xml”
650) this.width=650;" style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" title="图像 016" border="0" alt="图像 016" src="http://yiyangde7.blog.51cto.com//attachment/201212/4/392692_1354600261sjEW.jpg"
"759" height="218" />
省略……
同样使用<level-list>,
<animation-list android:oneshot="false" false表明循环,true表示只运行一次
<item android:duration="2000" 显示的时间,单位为毫秒
当处于充电状态android:maxLevel="0"电量为零时,开始显示图片,
2秒drawable/stat_sys_battery_0.png
0.8秒stat_sys_battery_charge_anim1.png
0.8秒drawable/stat_sys_battery_charge_anim2.png
如此循环下去,就变动画了。当电量为1时则执行下一个<item android:maxLevel="1">的循环。
附上原版systemui.apk里的“stat_sys_battery_charge.xml”
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="4" />
<item android:drawable="@drawable/stat_sys_battery_15" android:maxLevel="15" />
<item android:drawable="@drawable/stat_sys_battery_28" android:maxLevel="35" />
<item android:drawable="@drawable/stat_sys_battery_43" android:maxLevel="49" />
<item android:drawable="@drawable/stat_sys_battery_57" android:maxLevel="60" />
<item android:drawable="@drawable/stat_sys_battery_71" android:maxLevel="75" />
<item android:drawable="@drawable/stat_sys_battery_85" android:maxLevel="90" />
<item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
</level-list>
只有在电量为4,15,35,49等状态时,才改变图标,现在你应该明白为什么原版没有精确电量了吧。
简单的说,每当电量改变的时候系统会发出消息,“我的level变了”,程序根据level值,选择显示图片。
图片可以自己修改,注意名称分辨率格式,.9.png比较特殊,修改前参考网上文章。
以下为引用
关于</level-list>
显示不同的图片--level-list
有时候,我们为了在一个image view中显示不同的图片,往往会使用:
if (条件1) {
image.setBackground=\'#\'"
} else if (条件2) {
image.setBackground=\'#\'"
} ...
可以用另一个简便的方法实现相同的功能
首先,在res/drawable下建立一个xml文件,内容如下
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="4" android:drawable="@drawable/stat_sys_battery_0" />
<item android:maxLevel="14" android:drawable="@drawable/stat_sys_battery_10" />
<item android:maxLevel="29" android:drawable="@drawable/stat_sys_battery_20" />
<item android:maxLevel="49" android:drawable="@drawable/stat_sys_battery_40" />
<item android:maxLevel="69" android:drawable="@drawable/stat_sys_battery_60" />
<item android:maxLevel="89" android:drawable="@drawable/stat_sys_battery_80" />
<item android:maxLevel="100" android:drawable="@drawable/stat_sys_battery_100" />
</level-list>
然后在layout中把image view的src设置成已创建好的xml文件
程序中变换图片时,只需要使用
imageview.getDrawable().setLevel(50)
...
Android会根据level的值自动选择对应的图片。显示剩余电量就是用这个方法来显示不同图片的。
evel-list切换图片技巧
同一个ImageView(或其他组件)切换图片经常会通过代码时间,用if或switch可以轻易的实现切换不同的图片,不过这样并不是太方便
Android提供了一种方便的方法level-list标签
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="0" android:drawable="@android:color/transparent" />
<item android:maxLevel="1" android:drawable="@drawable/home_arrows_left_1" />
<item android:maxLevel="2" android:drawable="@drawable/home_arrows_left_2" />
<item android:maxLevel="3" android:drawable="@drawable/home_arrows_left_3" />
<item android:maxLevel="4" android:drawable="@drawable/home_arrows_left_4" />
</level-list>
使用时,只需切换level便可实现图片的切换
imageview.getDrawable().setLevel(level);//level是int值,对应level-list里的maxlevel
-----------------------------------------------------------------------------------------------------------------------------------------------
一、AnimationDrawable
顾名思义该类主要表示动画的图形类,可以实现逐帧播放的效果,下面代码示例如下
1. 定义一个cwj_animation.xml 放到res/drawable 目录下,其中定义的属性duration为延时,单位为毫秒,而oneshot属性表示是否仅播放一次,内容为:
<animation-list android:id="selected"android:oneshot="false">
<item android:drawable="@drawable/cwj0"android:duration="30" />
<item android:drawable="@drawable/cwj1"android:duration="30" />
<item android:drawable="@drawable/cwj2"android:duration="30" />
<item android:drawable="@drawable/cwj3"android:duration="30" />
<item android:drawable="@drawable/cwj4"android:duration="30" />
<item android:drawable="@drawable/cwj5"android:duration="30" />
</animation-list>
每个item就是一帧,drawable是该帧显示的图片,duration是显示时间,android:oneshot="false"表示动画一直进行,若为true则表示只播放一次动画。
前面我们详细介绍了Tween Aniamation,这节我将介绍另外一种动画Frame Animation。在前面已经说过,Frame
Animation是顺序播放事先做好的图像,与电影类似。不同于animationpackage, Android SDK提供了另外一个类AnimationDrawable来定义、使用Frame
Animation。
Frame Animation可以在XML Resource定义(还是存放到res/anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween
Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-
list根节点中包含多个item子节点,每个item节点定义一帧动画:当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:
下面就给个具体的XML例子,来定义一帧一帧的动画:
<animation-listxmlns:android=”http://schemas.android.com/apk/res/android”
android:oneshot=”true”>
<item android:drawable=”@drawable/rocket_thrust1″android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust2″android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust3″ android:duration=”200″/>
</animation-list>
上面的XML就定义了一个Frame Animation,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每帧动画持续200毫秒。
许多教程里写的修改“framework-res.apk”是2.x时代的老黄历了,进入4.0以后我们可以直接修改“systemui.apk”来增加百分比电量
反编译后,
要修改的两个文件在“\res\drawable”下,“stat_sys_battery.xml”和“stat_sys_battery_charge.xml”,前者是根据当前电量显示图标,后者是根据充电电量显示图标。
因为已经有前辈为我们写好,所以可以直接拿来替换掉原版里的文件。然后将你选择的200个图标(100个当前电量+100个充电电量)复制到“\res\drawabledrawable-hdpi”目录(480x800分辨率可以使用这个hdpi目录,手机分辨率低的可能要复制到mdpi下)。图标名称要参考上述2个文件。
反编译后将生成apk中的“resources.arsc”和“res目录”以储存方式替换到原systemui.apk中,这样就基本完成了。
现在我来解释一下
“stat_sys_battery.xml”
650) this.width=650;" style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" title="图像 017" border="0" alt="图像 017" src="http://yiyangde7.blog.51cto.com//attachment/201212/4/392692_1354600258Tau7.jpg"
"759" height="158" />
省略……
xml中使用了<level-list>标签,Android会根据level的值自动选择对应的图片
实际上反过来写更清楚些 <item android:maxLevel="0" android:drawable="@drawable/stat_sys_battery_0" />
当电量为零时(用maxLevel="0"表示),显示图片资源(用drawable表示)drawable/stat_sys_battery_0。
图片使用png格式,实际为“stat_sys_battery_0.png”。无指定路径,系统会根据手机分辨率自动选择hdpi目录或者是mdip等目录中的文件。
“stat_sys_battery_charge.xml”
650) this.width=650;" style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" title="图像 016" border="0" alt="图像 016" src="http://yiyangde7.blog.51cto.com//attachment/201212/4/392692_1354600261sjEW.jpg"
"759" height="218" />
省略……
同样使用<level-list>,
<animation-list android:oneshot="false" false表明循环,true表示只运行一次
<item android:duration="2000" 显示的时间,单位为毫秒
当处于充电状态android:maxLevel="0"电量为零时,开始显示图片,
2秒drawable/stat_sys_battery_0.png
0.8秒stat_sys_battery_charge_anim1.png
0.8秒drawable/stat_sys_battery_charge_anim2.png
如此循环下去,就变动画了。当电量为1时则执行下一个<item android:maxLevel="1">的循环。
附上原版systemui.apk里的“stat_sys_battery_charge.xml”
<?xml version="1.0" encoding="utf-8"?>
<level-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="4" />
<item android:drawable="@drawable/stat_sys_battery_15" android:maxLevel="15" />
<item android:drawable="@drawable/stat_sys_battery_28" android:maxLevel="35" />
<item android:drawable="@drawable/stat_sys_battery_43" android:maxLevel="49" />
<item android:drawable="@drawable/stat_sys_battery_57" android:maxLevel="60" />
<item android:drawable="@drawable/stat_sys_battery_71" android:maxLevel="75" />
<item android:drawable="@drawable/stat_sys_battery_85" android:maxLevel="90" />
<item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />
</level-list>
只有在电量为4,15,35,49等状态时,才改变图标,现在你应该明白为什么原版没有精确电量了吧。
简单的说,每当电量改变的时候系统会发出消息,“我的level变了”,程序根据level值,选择显示图片。
图片可以自己修改,注意名称分辨率格式,.9.png比较特殊,修改前参考网上文章。
以下为引用
关于</level-list>
显示不同的图片--level-list
有时候,我们为了在一个image view中显示不同的图片,往往会使用:
if (条件1) {
image.setBackground=\'#\'"
} else if (条件2) {
image.setBackground=\'#\'"
} ...
可以用另一个简便的方法实现相同的功能
首先,在res/drawable下建立一个xml文件,内容如下
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="4" android:drawable="@drawable/stat_sys_battery_0" />
<item android:maxLevel="14" android:drawable="@drawable/stat_sys_battery_10" />
<item android:maxLevel="29" android:drawable="@drawable/stat_sys_battery_20" />
<item android:maxLevel="49" android:drawable="@drawable/stat_sys_battery_40" />
<item android:maxLevel="69" android:drawable="@drawable/stat_sys_battery_60" />
<item android:maxLevel="89" android:drawable="@drawable/stat_sys_battery_80" />
<item android:maxLevel="100" android:drawable="@drawable/stat_sys_battery_100" />
</level-list>
然后在layout中把image view的src设置成已创建好的xml文件
程序中变换图片时,只需要使用
imageview.getDrawable().setLevel(50)
...
Android会根据level的值自动选择对应的图片。显示剩余电量就是用这个方法来显示不同图片的。
evel-list切换图片技巧
同一个ImageView(或其他组件)切换图片经常会通过代码时间,用if或switch可以轻易的实现切换不同的图片,不过这样并不是太方便
Android提供了一种方便的方法level-list标签
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="0" android:drawable="@android:color/transparent" />
<item android:maxLevel="1" android:drawable="@drawable/home_arrows_left_1" />
<item android:maxLevel="2" android:drawable="@drawable/home_arrows_left_2" />
<item android:maxLevel="3" android:drawable="@drawable/home_arrows_left_3" />
<item android:maxLevel="4" android:drawable="@drawable/home_arrows_left_4" />
</level-list>
使用时,只需切换level便可实现图片的切换
imageview.getDrawable().setLevel(level);//level是int值,对应level-list里的maxlevel
-----------------------------------------------------------------------------------------------------------------------------------------------
一、AnimationDrawable
顾名思义该类主要表示动画的图形类,可以实现逐帧播放的效果,下面代码示例如下
1. 定义一个cwj_animation.xml 放到res/drawable 目录下,其中定义的属性duration为延时,单位为毫秒,而oneshot属性表示是否仅播放一次,内容为:
<animation-list android:id="selected"android:oneshot="false">
<item android:drawable="@drawable/cwj0"android:duration="30" />
<item android:drawable="@drawable/cwj1"android:duration="30" />
<item android:drawable="@drawable/cwj2"android:duration="30" />
<item android:drawable="@drawable/cwj3"android:duration="30" />
<item android:drawable="@drawable/cwj4"android:duration="30" />
<item android:drawable="@drawable/cwj5"android:duration="30" />
</animation-list>
每个item就是一帧,drawable是该帧显示的图片,duration是显示时间,android:oneshot="false"表示动画一直进行,若为true则表示只播放一次动画。
前面我们详细介绍了Tween Aniamation,这节我将介绍另外一种动画Frame Animation。在前面已经说过,Frame
Animation是顺序播放事先做好的图像,与电影类似。不同于animationpackage, Android SDK提供了另外一个类AnimationDrawable来定义、使用Frame
Animation。
Frame Animation可以在XML Resource定义(还是存放到res/anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween
Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-
list根节点中包含多个item子节点,每个item节点定义一帧动画:当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:
XML属性 | 说明 |
drawable | 当前帧引用的drawable资源 |
duration | 当前帧显示的时间(毫秒为单位) |
oneshot | 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。 |
variablePadding | If true, allows the drawable’s padding to change based on the current state that is selected. |
visible | 规定drawable的初始可见性,默认为flase; |
<animation-listxmlns:android=”http://schemas.android.com/apk/res/android”
android:oneshot=”true”>
<item android:drawable=”@drawable/rocket_thrust1″android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust2″android:duration=”200″ />
<item android:drawable=”@drawable/rocket_thrust3″ android:duration=”200″/>
</animation-list>
上面的XML就定义了一个Frame Animation,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每帧动画持续200毫秒。
相关文章推荐
- 安卓4.0.4手机系统增加百分比电量及说明
- 安卓与IOS通过hessian接口实现用友系统移动手机订单4安卓手机开发
- [MTK] Bluetooth 车载系统 > 获取手机电量 SIM卡信号 运营商等 Android6.0
- 安卓系统手机获取root原理
- 安卓系统才是智能手机低廉化背后的“元凶”
- 移动web判断手机系统是安卓还是ios的解决办法
- 监听安卓手机电量BroadcastRecevier
- 安卓app中嵌入一个H5页面,当手机系统设置字体变大时,如何使H5页面的字体不会随用户自己调整的系统字体变化而变化?
- 安卓4.X系统 增加蓝牙接收文件类型
- 在系统中增加一个可唤醒中断--同时说明platform_device &platform_driver
- 安卓获取设备的系统类型,系统版本,手机生产厂商和手机型号
- 谷歌正研发独立汽车版安卓系统 无需连接手机
- js判断手机系统版本为安卓还是苹果,苹果系统版本号
- 微软发布新手机诺基亚X2:居然是安卓系统
- Cocos2dx 获取安卓手机网络类型及强度,电量等信息
- 企业邮箱在Android(安卓)系统手机上POP3/IMAP协议的设置方法
- 增加电量百分比功能
- “掌上12306”手机购票业务,支持苹果和安卓平台系统
- 安卓开发小米4,酷派 手机适配和调用系统相机相册做图片上传的问题