1、目录结构,本人是使用安卓死丢丢。

2、运行界面,输入框中输入数值,点击刷新,会再电池中显示出相应的电量

3、绘制自定义电池控件,首先,新建一个类BatteryState继承View
private Context mContext;
private float width;
private float height;
private Paint mPaint;
private float powerQuantity=0.5f;//电量
要使用到的变量
public BatteryState(Context context) {super(context);mContext=context;mPaint = new Paint();}public BatteryState(Context context, AttributeSet attrs) {super(context, attrs);mContext=context;mPaint = new Paint();
}public BatteryState(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);mContext=context;mPaint = new Paint();
}
三个构造方法,自定义控件的时候一般会把这三个构造方法写出来,便于在layout中使用或者直接定义,其中AttributeSet是当使用xml文件定义该控件时引用的属性集
  @Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        计算控件尺寸super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onDraw(Canvas canvas) {
//绘制界面super.onDraw(canvas);Bitmap batteryBitmap=ReadBitMap(mContext, R.drawable.battery_empty);//读取图片资源width=batteryBitmap.getWidth();height=batteryBitmap.getHeight();if (powerQuantity>0.3f&&powerQuantity<=1) {
//            电量少于30%显示红色mPaint.setColor(Color.GREEN);}else if (powerQuantity>=0&&powerQuantity<=0.3){mPaint.setColor(Color.RED);}
//        计算绘制电量的区域float right=width*0.94f;float left=width*0.21f+(right-width*0.21f)*(1-powerQuantity);float tope=height*0.45f;float bottom=height*0.67f;canvas.drawRect(left,tope,right,bottom,mPaint);canvas.drawBitmap(batteryBitmap, 0, 0, mPaint);}
由于我们定义的控件时一个单个控件,不是容器控件,所以我只重写了onMeasure、onDraw分别用来计算大小和绘制界面,根据背景图片来计算要绘制的区域
public void refreshPower(float power)
{powerQuantity=power;if (powerQuantity>1.0f)powerQuantity=1.0f;if (powerQuantity<0)powerQuantity=0;invalidate();
}
刷新控件
4、在xml文件中定义:
<LinearLayoutandroid:layout_width="wrap_content"android:layout_marginLeft="30dp"android:layout_height="30dp"><com.example.administrator.batterytest.BatteryStateandroid:id="@+id/bs_power"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</LinearLayout>
5、在Activity中使用
        mBtnTry = (TextView) findViewById(R.id.btn_try);mBtnTry.setText("刷新电量");
//        mBtnTry.setBackground(getResources().getDrawable(R.drawable.maxwell_sun_5_bar));mBsPower = (BatteryState) findViewById(R.id.bs_power);mBtnTry.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {float power = Integer.parseInt(mEtPower.getText().toString());float p = power / 100;mBsPower.refreshPower(p);}});
源码 http://download.csdn.net/detail/y280903468/9480079

Android做一个显示电量的小控件相关推荐

  1. 使用Vue做一个自定义的日历小控件

    废话少说,先上效果图: 可以在效果图中看到,选择不同的月份的时候当月天数与星期几都是一一对应,非当月天数则是灰色显示,一目了然. 并且此日历控件支持自动确定当前时间,每次打开默认显示的就是最新的月份, ...

  2. Android而一个超级漂亮的日历控件

    ※效果 ※用法 package com.fancyy.calendarweight;import java.util.ArrayList; import java.util.List;import a ...

  3. android 固定底部 布局_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  4. android listview添加数据_Android系统列表控件

    在android系统控件中,有多个控件可以展示列表数据. 一.ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示多个内容,以便于我们用手指进行滑动. ListView ...

  5. Android UI设计之十一自定义ViewGroup,打造通用的关闭键盘小控件ImeObser

    2019独角兽企业重金招聘Python工程师标准>>> 转载请注明出处:http://blog.csdn.net/llew2011/article/details/51598682 ...

  6. Android 仿微信语音录音小控件

    Android 仿微信语音录音小控件 前段时间一直在做IM聊天这方面的撸码工作,涉及到了很多小控件,有时间我会慢慢给大家分享一下我的小成果,希望大家一起学习,一起进步,今天来和大家来说一下Androi ...

  7. Android之RemoteViews篇上————通知栏和桌面小控件

    Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 文章目录 Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 二.RemoteViews的概 ...

  8. 如何在Android实现桌面清理内存简单Widget小控件

    如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...

  9. android桌面时钟小控件开发记录

    所谓桌面小控件,就是能之间显示在Android系统桌面的小程序. 桌面小控件的实现是基于Broadcast的形式实现的,因此,每一个桌面小控件都对应于一个BroadcastReceiver类.Andr ...

最新文章

  1. Spring源码分析【7】-Spring 模板页和JSP文件的编译
  2. R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter、分组颜色配置)实战
  3. 人工智能和大数据的开发过程中需要注意这12点
  4. pythonfor循环语句1到7、不要4_【IT专家】关于Python中的for循环控制语句
  5. 开源如此火热,但研究表明该领域已不再增长
  6. ML之Hash_HamMingDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用汉明距离算法进行判别
  7. 不同局域网内经Internet的P2P通信技术总结
  8. 十二、深入JavaScript中的Date
  9. 在 Java CAPS 中使用 LDAP
  10. node nest 框架学习(一)
  11. android 嵌套分组拖动_GitHub - Mosect/DragLayout: Android拖拽控件,支持上下左右滑动、折叠或者嵌套ListView、RecyclerView等...
  12. php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换
  13. vs代码补全的快捷键_iPad Pro变生产力工具,你还缺个轻量级浏览器端代码编辑器...
  14. 数据挖掘比赛笔记总结
  15. 计算机电脑的时区怎么弄,电脑时区怎么设置,教你win10中国时区UTC设置教程
  16. 提高团队协作效率就靠它们了!
  17. 50行实现C语言FM收音机-Taskbus Stdio封装器在SDR课程中的应用
  18. USB通信协议与供电协议全解
  19. RK3588 ssh Failed to start OpenBSD Secure Shell server 以及E: Sub-process /usr/bin/dpkg returned无法下载软件
  20. ios CAShapeLayer

热门文章

  1. MySQL高级-索引(BTree)结构
  2. linux系统中用户账户信息保存在,【填空题】Linux系统中,除密码外的用户账户信息保存在 配置文件中...
  3. 奥特曼系列ol服务器名称带怪兽,《奥特曼系列ol》怪兽搭配 怪兽阵容搭配推荐...
  4. 前端三大法宝:HTML CSS JS JSON
  5. 谷歌推出人工智能自动绘图工具AutoDraw
  6. 为何我不喜欢短视频以及…
  7. Java中实现SMTP邮件服务器-用demo简单粗暴的来发一波邮件了
  8. 小程序商城系统经营小妙招!
  9. IOS - 手机屏幕上方显示 VPN 图标怎么回事?
  10. layui 使用 echarts