Android 自定义UI--电池
首先看一下效果图,
下面看代码:
- /**
- *
- */
- package com.example.batterydemo;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Paint.Style;
- import android.graphics.RectF;
- import android.util.AttributeSet;
- import android.view.View;
- /**
- * @author kince
- * @category 自定义View电池
- * @time 2014.2.13
- * @qq 543781062
- *
- */
- public class BatteryView extends View {
- /**
- * 画笔信息
- */
- private Paint mBatteryPaint;
- private Paint mPowerPaint;
- private float mBatteryStroke = 2f;
- /**
- * 屏幕高宽
- */
- private int measureWidth;
- private int measureHeigth;
- /**
- *
- * 电池参数
- */
- private float mBatteryHeight = 30f; // 电池的高度
- private float mBatteryWidth = 60f; // 电池的宽度
- private float mCapHeight = 15f;
- private float mCapWidth = 5f;
- /**
- *
- * 电池电量
- */
- private float mPowerPadding = 1;
- private float mPowerHeight = mBatteryHeight - mBatteryStroke
- - mPowerPadding * 2; // 电池身体的高度
- private float mPowerWidth = mBatteryWidth - mBatteryStroke - mPowerPadding
- * 2;// 电池身体的总宽度
- private float mPower = 0f;
- /**
- *
- * 矩形
- */
- private RectF mBatteryRect;
- private RectF mCapRect;
- private RectF mPowerRect;
- public BatteryView(Context context) {
- super(context);
- initView();
- }
- public BatteryView(Context context, AttributeSet attrs) {
- super(context, attrs);
- initView();
- }
- public BatteryView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- initView();
- }
- public void initView() {
- /**
- * 设置电池画笔
- */
- mBatteryPaint = new Paint();
- mBatteryPaint.setColor(Color.GRAY);
- mBatteryPaint.setAntiAlias(true);
- mBatteryPaint.setStyle(Style.STROKE);
- mBatteryPaint.setStrokeWidth(mBatteryStroke);
- /**
- * 设置电量画笔
- */
- mPowerPaint = new Paint();
- mPowerPaint.setColor(Color.RED);
- mPowerPaint.setAntiAlias(true);
- mPowerPaint.setStyle(Style.FILL);
- mPowerPaint.setStrokeWidth(mBatteryStroke);
- /**
- * 设置电池矩形
- */
- mBatteryRect = new RectF(mCapWidth, 0, mBatteryWidth, mBatteryHeight);
- /**
- * 设置电池盖矩形
- */
- mCapRect = new RectF(0, (mBatteryHeight - mCapHeight) / 2, mCapWidth,
- (mBatteryHeight - mCapHeight) / 2 + mCapHeight);
- /**
- * 设置电量矩形
- */
- mPowerRect = new RectF(mCapWidth + mBatteryStroke / 2 + mPowerPadding
- + mPowerWidth * ((100f - mPower) / 100f), // 需要调整左边的位置
- mPowerPadding + mBatteryStroke / 2, // 需要考虑到 画笔的宽度
- mBatteryWidth - mPowerPadding * 2, mBatteryStroke / 2
- + mPowerPadding + mPowerHeight);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- canvas.save();
- canvas.translate(measureWidth / 2, measureHeigth / 2);
- canvas.drawRoundRect(mBatteryRect, 2f, 2f, mBatteryPaint); // 画电池轮廓需要考虑 画笔的宽度
- canvas.drawRoundRect(mCapRect, 2f, 2f, mBatteryPaint);// 画电池盖
- canvas.drawRect(mPowerRect, mPowerPaint);// 画电量
- canvas.restore();
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- measureWidth = MeasureSpec.getSize(widthMeasureSpec);
- measureHeigth = MeasureSpec.getSize(heightMeasureSpec);
- setMeasuredDimension(measureWidth, measureHeigth);
- }
- /**]
- * @category 设置电池电量
- * @param power
- */
- public void setPower(float power) {
- mPower = power;
- if (mPower < 0) {
- mPower = 0;
- }
- mPowerRect = new RectF(mCapWidth + mBatteryStroke / 2 + mPowerPadding
- + mPowerWidth * ((100f - mPower) / 100f), // 需要调整左边的位置
- mPowerPadding + mBatteryStroke / 2, // 需要考虑到 画笔的宽度
- mBatteryWidth - mPowerPadding * 2, mBatteryStroke / 2
- + mPowerPadding + mPowerHeight);
- invalidate();
- }
- }
代码已经注释得比较清楚了,大家自己看吧,不懂的方法可以去看一下api。
Android 自定义UI--电池的更多相关文章
- android自定义UI模板图文详解
不知道大家在实际开发中有没有自定义过UI模板?今天花时间研究了一下android中自定义UI模板,与大家分享一下. 每个设计良好的App都是自定义标题栏,在自定义标题栏的过程中大部分人可能都是自定义一 ...
- Android自定义UI的实现和应用
在Android项目开发中,不可避免的要遇到自定义的UI,用较好的体验去讨好UED妹子和交互设计师手下留情~几个迭代下来,遇到了不少这样的要求,有简单有复杂.最好的实现方案就是讲业务和UI隔离,封装成 ...
- Android自定义UI模板
第一步:自定义xml属性 新建一个android项目,在values文件夹中新建一个atts.xml的文件,在这个xml文件中声明我们一会在使用自定义控件时候需要指明的属性.atts.xml < ...
- android自定义View之NotePad出鞘记
现在我们的手机上基本都会有一个记事本,用起来倒也还算方便,记事本这种东东,如果我想要自己实现,该怎么做呢?今天我们就通过自定义View的方式来自定义一个记事本.OK,废话不多说,先来看看效果图. 整个 ...
- Android开源的精美日历控件,热插拔设计的万能自定义UI
Android开源的精美日历控件,热插拔设计的万能自定义UI UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的 ...
- Android自定义View和控件之一-定制属于自己的UI
照例,拿来主义.我的学习是基于下面的三篇blog.前两是基本的流程,第三篇里有比较细致的绘制相关的属性.第4篇介绍了如何减少布局层次来提高效率. 1. 教你搞定Android自定义View 2. 教你 ...
- Android自定义View 画弧形,文字,并增加动画效果
一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类 B ...
- Android 自定义View合集
自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...
- Android 自定义View (五)——实践
前言: 前面已经介绍了<Android 自定义 view(四)-- onMeasure 方法理解>,那么这次我们就来小实践下吧 任务: 公司现有两个任务需要我完成 (1)监测液化天然气液压 ...
- [原] Android 自定义View步骤
例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能 ...
随机推荐
- Java基础知识强化65:基本类型包装类之Integer的构造方法
1. Integer类概述 (1)Integer类在对象中包装了一个基本类型 int 的值,Integer类型的对象包含一个int类型的字段. (2)该类提供了多个方法,能在int类型和String类 ...
- Java基本类型与包装类
存储方式及位置的不同,基本类型是直接存储变量的值保存在堆栈中能高效的存取,封装类型需要通过引用指向实例,具体的实例保存在堆中 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型) ...
- WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)
MVVM绑定 view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性.注:控件的绑定只能绑定到属性上,不能绑定到字段上: 接下来就是代码 (view): <Wind ...
- 在Silverlight中打开网页的几种方法
HtmlPage.PopupWindow HtmlPopupWindowOptions option = new HtmlPopupWindowOptions(); option.Directorie ...
- 动态绑定、阻止继承,final类和方法
1.编译器查看对象的声明类型和方法名.当调用 x.f(param); 且隐式参数x生命为C类对象.这时候可能有多个名字都叫f,但是参数类型不一样的方法.编译器会一一列举C类中名为f的方法和其超类中访问 ...
- Dom4j 添加 / 更新 / 删除 XML
1.获得文档 /** *1.获得解析流 *2.解析XML */ 2.添加 /** *1.获取父元素 *2.创建元素 *3.创建属性并添加到元素中 *4.元素添加到根节点 */ 3.更新 /** *1. ...
- android图形基础知识
Android核心分析(23)-----Andoird GDI之基本原理及其总体框架 2010-06-13 22:49 18223人阅读 评论(18) 收藏 举报 AndroidGDI基本框架 在An ...
- XML预定义的实体
在TSQL读取XML中一些特定的字符时出错,在XML中有些自付要用实体: 下面是五个在XML文档中预定义好的实体: < < 小于号 > > 大于号 & & 和 ...
- div 居中进行总结
1.margin:auto ;让元素居中,需要确定元素的宽度,并且需要是块元素 eg: div { width:200px; height:200px; background:#222; margin ...
- Sogou搜狗搜索引擎登录网站 - Blog透视镜
Sogou搜狗是中国搜狐旗下的搜索引擎,其登录方式也很简单,只要输入网址,验证码即可,不需要注册账号,再进行登录,其他非 * 必填的字段,可留下空白不填,验证码只有4码,也很清晰可见,不像有的网站,即 ...