一直想把外国的一个工具箱的电池那个动画做出来,今天有时间就想做一下 界面是这样的,制作了基本部分,果然还是手机卫士,比较考基础。

①通过Intent去的手机音量的变化
电池的电量一直是手机用户所关心的问题,而在android系统中,专门提供了一个取得电池电量的消息 Action—ACTION_BATTERY_CHANGED。
回到,demo里面 既然我要获取系统的信息,就先注册一个广播,取得电池的信息,BatteryReceiver.java类 广播 四大组件先去配置文件注册一把 我要获取的信息,都在UI上面,用一个map集合装上我们信息 通过handler.dispatchMessage 将信息传过去..................
- package com.example.bettary.recevier;
-
- import java.util.HashMap;
- import java.util.Map;
-
- import com.example.bettary.BatteryManagerActivity;
-
-
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.os.BatteryManager;
- import android.os.Message;
-
-
-
- /**
- * @author xiaoxin007
- * 2014-12-4下午5:53:01
- * TODO 电池的广播接收者
- */
- public class BatteryReceiver extends BroadcastReceiver {
- Map<String, Object> map;
- private Message message;
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
- map = new HashMap<String, Object>();
- /** 电池剩余电量 */
- map.put("level", "" + intent.getIntExtra("level", 0));
- /** 获取电池满电量数值 */
- map.put("scale", "" + intent.getIntExtra("scale", 0));
- /** 获取电池技术支持 */
- map.put("technology", "" + intent.getStringExtra("technology"));
- /** 获取电池状态 */
- map.put("status", ""+ intent.getIntExtra("status",BatteryManager.BATTERY_STATUS_UNKNOWN));
- /** 获取电源信息 */
- map.put("plugType", "" + intent.getIntExtra("plugged", 0));
- /** 获取电池健康度 */
- map.put("health",""+ intent.getIntExtra("health",BatteryManager.BATTERY_HEALTH_UNKNOWN));
- /** 获取电池电压 */
- map.put("voltage", intent.getIntExtra("voltage", 0) + "");
- /** 获取电池温度 */
- map.put("temperature", intent.getIntExtra("temperature", 0) + "");
- if (map!=null) {
- message = new Message();
- message.obj = map;
- BatteryManagerActivity.handler1.dispatchMessage(message);
- }
- }
- }
-
- }
②通过动画实现电池的递增增加效果
现在开始 activity代码了 布局有点复杂,后面我贴上源码,大家在看吧
零 动画动起来
1.实例化动画类
- animImageView = new AnimImageView();
2.动画类实现runnble 进行耗时操作
- public class AnimImageView implements Runnable {
-
- @Override
- public void run() {
- BterryAnim();
- battery_image.postDelayed(animImageView, 1000);
- }
-
- }
通过定义postDelayed 延时一秒后 又执行此线程
3.使用Matrix控制充电动画
- public void BterryAnim() {
- float[] stateArray = new float[] { 0.1f, 0.25f, 0.5f, 0.75f, 1f };
-
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
- R.drawable.battery_full);
- int height = bitmap.getHeight();
- int width = bitmap.getWidth();
- // 使用Matrix控制充电动画
- Matrix matrix = new Matrix();
- matrix.postScale(stateArray[state], 1.0f);
- Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,
- matrix, false);
- state = state + 1;
- battery_image.setImageBitmap(newBitmap);
- if (state == 5) {
- state = 0;
- }
- }
一初始化布局
- private void init() {
-
- battery_Status = (TextView) findViewById(R.id.battery_status);
-
- battery_Run_Status = (TextView) findViewById(R.id.battery_health);
-
- battery_Voltage = (TextView) findViewById(R.id.battery_voltage);
-
- battery_Temperature = (TextView) findViewById(R.id.battery_temperature);
-
- battery_Technology = (TextView) findViewById(R.id.battery_technology);
-
-
-
- battery_Level = (TextView) findViewById(R.id.battery);
-
- bty_Charging = (ImageView) findViewById(R.id.charging);
-
- battery_image = (ImageView) findViewById(R.id.battery_image);
- }
二注册广播
其实我还在是在代码中注册的 一个意图,一个广播类
-
-
-
- private void regReceiver() {
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- registerReceiver(new BatteryReceiver(), filter);
- }
然后广播类 通过handler类 将获取的到电池信息 返回回来..........
三通过handler执行UI更新操作
-
-
-
- handler1 = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- map = (Map<String, Object>) msg.obj;
- int health = Integer.parseInt(map.get("health").toString());
- Log.i(TAG, health + "");
- if (health == 2) {
-
- battery_Run_Status.setText("正常");
- } else {
-
- battery_Run_Status.setText("一般");
- }
-
-
- battery_Voltage.setText("" + map.get("voltage") + "mV");
-
- double time = Double.parseDouble(map.get("temperature") + "");
- battery_Temperature.setText("" + time / 10 + "°C");
-
- max = Double.parseDouble(map.get("scale") + "");
- min = Double.parseDouble(map.get("level") + "");
- temp = (min / max);
-
- battery_Technology.setText("" + map.get("technology"));
-
-
-
-
-
-
-
-
- if (map.get("plugType").equals("2")) {
-
- bty_Charging.setVisibility(View.VISIBLE);
-
- battery_Status.setText("正在充电(USB)");
- if (isAnimRun == false) {
-
- battery_image.postDelayed(animImageView, 1000);
- isAnimRun = true;
- }
-
- } else if (map.get("plugType").equals("1")) {
-
- bty_Charging.setVisibility(View.VISIBLE);
-
- battery_Status.setText("正在充电(交流电)");
- if (isAnimRun == false) {
-
- battery_image.postDelayed(animImageView, 1000);
- isAnimRun = true;
- }
-
- } else if (map.get("plugType").equals("0")) {
-
- bty_Charging.setVisibility(View.INVISIBLE);
-
- battery_Status.setText("正在耗电");
- if (isAnimRun == true) {
-
- battery_image.removeCallbacks(animImageView);
-
- setSize(temp * 100);
-
- isAnimRun = false;
- }
- }
- setSize(temp * 100);
- System.out.println(temp + ":" + temp * 100);
- battery_Level.setText(temp * 100 + "%");
- }
- };
-
- }
点击打开链接