监控电池变化比较简单,但是充电时候要电量从当前电量增长到满状态,然后一直重复,后来发现将对应的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("没有充电,电量背景为图片");
- }
- }
- }
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。其他图片
电池背景图片
充电的时候显示闪电