监控电池变化比较简单,但是充电时候要电量从当前电量增长到满状态,然后一直重复,后来发现将对应的ImageView的background指定到animation即可
1.需要多张电量图片
电量状态1
电量状态2
电量状态3
电量状态4
电量状态5
电量状态6
2.然后生成多个animation文件,分别是从状态1到状态6,状态2到状态6.。。。。。
如:animation_battery_1.xml
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/battery_1" android:duration="200" /> <item android:drawable="@drawable/battery_2" android:duration="200" /> <item android:drawable="@drawable/battery_3" android:duration="200" /> <item android:drawable="@drawable/battery_4" android:duration="200" /> <item android:drawable="@drawable/battery_5" android:duration="200" /> <item android:drawable="@drawable/battery_6" android:duration="200" /> </animation-list>
如:animation_battery_2.xml
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/battery_2" android:duration="200" /> <item android:drawable="@drawable/battery_3" android:duration="200" /> <item android:drawable="@drawable/battery_4" android:duration="200" /> <item android:drawable="@drawable/battery_5" android:duration="200" /> <item android:drawable="@drawable/battery_6" android:duration="200" /> </animation-list>
3.在代码里面通过设置ivBattery.setBackgroundResource(batteryAnimation),其中batteryAnimation为animation文件
public class BatteryActivity extends Activity {
ImageView ivBattery;//电池电量
ImageView ivBatteryCharging;//充电中
TextView tvStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.battery_charging);
ivBattery = (ImageView)findViewById(R.id.iv_battry);
ivBatteryCharging = (ImageView)findViewById(R.id.iv_battry_charging);
tvStatus = (TextView)findViewById(R.id.tv_statues);
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(batteryReceiver);
}
private BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_NOT_CHARGING);
notifyBattery(level,scale,status);
}
}
};
public void notifyBattery(int level,int scale,int status){
int per = scale/6;
int batteryPic;//电量图片
int batteryAnimation;//电量动态增长
if(level<per){
batteryAnimation = R.drawable.animation_battery_1;
batteryPic = R.drawable.battery_1;
}else if(level<per*2){
batteryAnimation = R.drawable.animation_battery_2;
batteryPic = R.drawable.battery_2;
}else if(level<per*3){
batteryAnimation = R.drawable.animation_battery_3;
batteryPic = R.drawable.battery_3;
}else if(level<per*4){
batteryAnimation = R.drawable.animation_battery_4;
batteryPic = R.drawable.battery_4;
}else if(level<per*5){
batteryAnimation = R.drawable.animation_battery_5;
batteryPic = R.drawable.battery_5;
}else{
batteryAnimation = R.drawable.animation_battery_5;
batteryPic = R.drawable.battery_6;
}
if(status==BatteryManager.BATTERY_STATUS_CHARGING){
ivBattery.setBackgroundResource(batteryAnimation);//將電量背景修改為animation即可
AnimationDrawable frameAnimation = (AnimationDrawable)ivBattery.getBackground();
if(!frameAnimation.isRunning()){
frameAnimation.stop();
frameAnimation.start();
}
ivBatteryCharging.setVisibility(View.VISIBLE);
tvStatus.setText("充电中,电量背景为animation");
}else{
ivBatteryCharging.setVisibility(View.INVISIBLE);
ivBattery.setBackgroundResource(batteryPic);
tvStatus.setText("没有充电,电量背景为图片");
}
}
}
4.记得在manifest中添加权限
<uses-permission android:name="android.permission.BATTERY_STATS"/>
5.充电的时候界面显示,其中图片是动态的
6.没有充电时候显示
7。其他图片
电池背景图片
充电的时候显示闪电