Android 绘制电池电量图标在视频播放等全屏情况下有用到。
先在布局文件中写一个ImageView

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main2"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:background="@color/colorAccent"tools:context="com.example.mybluetooth.Main2Activity"><!--电池电量 --><ImageView
        android:id="@+id/image_battery"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginLeft="300dp"android:src="@drawable/battery"/>
</RelativeLayout>

准备好两张电池电量图片(满和空),在drawable中定义battery.xml。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" ><!-- 空的电池 --><item><bitmap android:src="@drawable/battery_empty" /></item><!-- 裁剪满的电池图标 --><item android:id="@+id/clip_drawable"><clip
            android:clipOrientation="horizontal"android:drawable="@drawable/battery_full"android:gravity="left" /></item></layer-list>

在Activity中实现。

public class Main2Activity extends AppCompatActivity {private ClipDrawable clipDrawable;private int currentPower = 0;private boolean isCharging = false;private Handler handler = new Handler();private boolean canAnimater;private  ImageView imageBattery;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);imageBattery = (ImageView) findViewById(R.id.image_battery);LayerDrawable layerDrawable = (LayerDrawable) imageBattery.getDrawable();clipDrawable = (ClipDrawable) layerDrawable.findDrawableByLayerId(R.id.clip_drawable);}@Overrideprotected void onResume() {super.onResume();canAnimater =true;handler.removeCallbacks(chargingRunnable);handler.post(chargingRunnable);IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);intentFilter.addAction(Intent.ACTION_POWER_CONNECTED);intentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);registerReceiver(batteryChangedReceiver, intentFilter);}@Overrideprotected void onPause() {super.onPause();canAnimater=false;unregisterReceiver(batteryChangedReceiver);handler.removeCallbacks(chargingRunnable);}// 电量变化广播// TODO 假设进入Activity之前就已经在充电,进入之后无法收到充电的广播private BroadcastReceiver batteryChangedReceiver = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {int level = intent.getIntExtra("level", 0);int scale = intent.getIntExtra("scale", 100);int power = level * 100 / scale;currentPower = power;clipDrawable.setLevel(calculateLevel(power));} else {int status = intent.getIntExtra("status", currentPower);if (Intent.ACTION_POWER_CONNECTED.equals(intent.getAction())) {isCharging = true;} else if (Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction())) {isCharging = false;}Toast.makeText(Main2Activity.this, "充电:" + isCharging + "," + status, Toast.LENGTH_SHORT).show();if (isCharging) {handler.removeCallbacks(chargingRunnable);handler.post(chargingRunnable);}//在自定义充电状态的图片时在这里
//                else {//                    imageBattery.setImageResource(R.drawable.battery_full);
//                }}}};private int calculateLevel(int progress) {int leftOffest = dip2px(this, 2);int powerLength = dip2px(this, 26.5f);// 40 px in hdpiint totalLength = dip2px(this, 32.5f);// 49 px in hdpiint level = (leftOffest + powerLength * progress / 100) * 10000 / totalLength;return level;}private int dip2px(Context context, float v) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (v * scale + 0.5f);}private Runnable chargingRunnable = new Runnable() {@Overridepublic void run() {Log.e("test", "isCharging:" + isCharging + ",canAnimater:" + canAnimater);if (!isCharging || !canAnimater) {return;}// imageBattery.setImageResource(R.drawable.battery_empty); 充电状态图片ValueAnimator animator = ValueAnimator.ofInt(100, currentPower, 100);animator.setDuration(1500);animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {int animatedValue = (Integer) animation.getAnimatedValue();clipDrawable.setLevel(calculateLevel(animatedValue));}});animator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {if (isCharging && canAnimater) {handler.postDelayed(chargingRunnable, 600);} else {clipDrawable.setLevel(calculateLevel(currentPower));}}});animator.start();}};
}

Android 绘制电池电量图标(含充电状态)。相关推荐

  1. android 电池绘制,Android绘制电池电量图标

    Android手动绘制电池图标展示 1.[代码][Java]代码 public class PowerIconView extends View { private int borderColor = ...

  2. 修改电量android,安卓手机端修改电池电量图标的教程

    安卓手机端是可以给电池电量图标进行修改的,恐怕大家都不知道吧,不同的系统基本都有比一样的电量图标,这就导致了不是每一个人都喜欢同一个图标,现在我就来为大家讲解如何在手机端修改电量图标的教程. 第一步: ...

  3. 安卓修改电池容量教程_安卓手机端修改电池电量图标的教程

    5.修改电量显示为1%,电池图标为原版+数字显示风格.你一定不全知道的秘密,安卓手机拨号键代码大全.在安卓手机拨号面板中输入以下拨号代码就可执行一些鲜为人知的键盘隐藏功能,这些是开发者所熟知的,但普通 ...

  4. android 电池电量广播,Android查看电池电量的方法(基于BroadcastReceiver)

    本文实例讲述了Android查看电池电量的方法.分享给大家供大家参考,具体如下: 程序如下: import android.app.Activity; import android.app.Dialo ...

  5. 安卓修改电池容量教程_安卓(Android)系统电池电量修改图文教程

    安卓( Android )系统电池电量修改图文教程 有机友不喜欢新 rom 的电池图标, 想要官方的原版电池 图标,也有机友想更换其他电池图标.为了方便想更换电池 图标的机友,发一个最简易的教程. 在 ...

  6. QT制作电池电量图标

    利用QT实现电池电量显示好充电动态效果,先看效果图: 电池电量颜色划分: 电池gif:0-29–红色 剩余电量数字:红色 电池gif:红色30-54–黄色 剩余电量数字:红色 电池gif:55-100 ...

  7. Android监控电池电量和充电状态

    确定当前充电状态 首先,确定当前充电状态.BatteryManagerBatteryManagerBatteryManager 会在一个包含充电状态的粘性 Intent 中广播所有电池和充电详情. 由 ...

  8. android adb 电池电量,adb 查看电池状态信息。详解

    手机连接上电脑.输入adb命令:adb shell dumpsys battery Current Battery Service state:   ####当前电池服务状态 AC powered: ...

  9. android 自定义View绘制电池电量(电池内带数字显示)

    最新公司需要一个电池内带数字的显示电池电量需求,百度了一下.参考下面这篇文章写的Android自定义View之电池电量显示. 增加了里面电池电量数字显示,还有就是一个屏幕适配.不管屏幕分辨率基本都能适 ...

最新文章

  1. boxFilter 滤波器实现
  2. 如何使用grup制作U盘多重启动盘
  3. 防火墙未开启导致通过redis篡改.ssh/authorized_keys
  4. 附近的人 php,php 附近的人
  5. having and group by
  6. SAP Spartacus autofocus Directive的失败的单元测试 - 2021年1月13日 1.1
  7. 用android ndk编译ffmpeg,AndroidNDK交叉编译FFMPEG
  8. python扫题软件_python 实现端口扫描工具
  9. 直播丨抢鲜体验-openGauss入门
  10. flash人物原地走路,Flash制作小人走路简单动画图文教程
  11. ItelliJ IDEA下载及获取注册码详解
  12. 正确使用 realloc()
  13. 角度和弧度之间的转换
  14. 西电计算机学院王宇平,西安电子科技大学计算机学院硕导介绍:王宇平
  15. 最新数据库驱动包下载(完整版)
  16. red5源码分析---1
  17. 6m缓存和8m缓存差距_全能工具箱一款专门为安卓设备研发的综合型系统管理工具。实时内存、进程清理、缓存清理、SD卡文件管理、历史记录清除、开机项管理!...
  18. 领导层必看:要想公司管理好,办公软件少不了
  19. 赤霉素3β-羟化酶的下调增强了大豆的光合作用并提高了种子产量
  20. android_图片转视频_image2video

热门文章

  1. 超实用后台UI模板有这些就够了!(一)
  2. 新媒体营销的模式,自媒体营销方式有哪些
  3. C语言判断输入的正整数是否既是5又是7的整倍数。
  4. 旅游类APP-Android模块分析
  5. windows中 FFmpeg 配置libx264 遇到的坑和解决办法
  6. JQuery快速入门之插件
  7. html5 文字滑动效果,jQuery滑动文字特效
  8. 【Linux】gcc编译器下载与手动安装
  9. postman获取返回值及tests[]用法
  10. maven 项目中引入第三方jar包的方法