http://blog.csdn.net/wangjinyu501/article/details/19164655

http://blog.csdn.net/wangjinyu501/article/details/19164655

http://blog.csdn.net/wangjinyu501/article/details/19164655

http://blog.csdn.net/wangjinyu501/article/details/19164655

http://blog.csdn.net/wangjinyu501/article/details/19164655


Android 自定义UI--电池

分类:Android 1176人阅读 评论(3) 收藏 举报

首先看一下效果图,


下面看代码:

[html] view plain copy
  1. /**
  2. *
  3. */
  4. packagecom.example.batterydemo;
  5. importandroid.content.Context;
  6. importandroid.graphics.Canvas;
  7. importandroid.graphics.Color;
  8. importandroid.graphics.Paint;
  9. importandroid.graphics.Paint.Style;
  10. importandroid.graphics.RectF;
  11. importandroid.util.AttributeSet;
  12. importandroid.view.View;
  13. /**
  14. *@authorkince
  15. *@category自定义View电池
  16. *@time2014.2.13
  17. *@qq543781062
  18. *
  19. */
  20. publicclassBatteryViewextendsView{
  21. /**
  22. *画笔信息
  23. */
  24. privatePaintmBatteryPaint;
  25. privatePaintmPowerPaint;
  26. privatefloatmBatteryStroke=2f;
  27. /**
  28. *屏幕高宽
  29. */
  30. privateintmeasureWidth;
  31. privateintmeasureHeigth;
  32. /**
  33. *
  34. *电池参数
  35. */
  36. privatefloatmBatteryHeight=30f;//电池的高度
  37. privatefloatmBatteryWidth=60f;//电池的宽度
  38. privatefloatmCapHeight=15f;
  39. privatefloatmCapWidth=5f;
  40. /**
  41. *
  42. *电池电量
  43. */
  44. privatefloatmPowerPadding=1;
  45. privatefloatmPowerHeight=mBatteryHeight-mBatteryStroke
  46. -mPowerPadding*2;//电池身体的高度
  47. privatefloatmPowerWidth=mBatteryWidth-mBatteryStroke-mPowerPadding
  48. *2;//电池身体的总宽度
  49. privatefloatmPower=0f;
  50. /**
  51. *
  52. *矩形
  53. */
  54. privateRectFmBatteryRect;
  55. privateRectFmCapRect;
  56. privateRectFmPowerRect;
  57. publicBatteryView(Contextcontext){
  58. super(context);
  59. initView();
  60. }
  61. publicBatteryView(Contextcontext,AttributeSetattrs){
  62. super(context,attrs);
  63. initView();
  64. }
  65. publicBatteryView(Contextcontext,AttributeSetattrs,intdefStyleAttr){
  66. super(context,attrs,defStyleAttr);
  67. initView();
  68. }
  69. publicvoidinitView(){
  70. /**
  71. *设置电池画笔
  72. */
  73. mBatteryPaint=newPaint();
  74. mBatteryPaint.setColor(Color.GRAY);
  75. mBatteryPaint.setAntiAlias(true);
  76. mBatteryPaint.setStyle(Style.STROKE);
  77. mBatteryPaint.setStrokeWidth(mBatteryStroke);
  78. /**
  79. *设置电量画笔
  80. */
  81. mPowerPaint=newPaint();
  82. mPowerPaint.setColor(Color.RED);
  83. mPowerPaint.setAntiAlias(true);
  84. mPowerPaint.setStyle(Style.FILL);
  85. mPowerPaint.setStrokeWidth(mBatteryStroke);
  86. /**
  87. *设置电池矩形
  88. */
  89. mBatteryRect=newRectF(mCapWidth,0,mBatteryWidth,mBatteryHeight);
  90. /**
  91. *设置电池盖矩形
  92. */
  93. mCapRect=newRectF(0,(mBatteryHeight-mCapHeight)/2,mCapWidth,
  94. (mBatteryHeight-mCapHeight)/2+mCapHeight);
  95. /**
  96. *设置电量矩形
  97. */
  98. mPowerRect=newRectF(mCapWidth+mBatteryStroke/2+mPowerPadding
  99. +mPowerWidth*((100f-mPower)/100f),//需要调整左边的位置
  100. mPowerPadding+mBatteryStroke/2,//需要考虑到画笔的宽度
  101. mBatteryWidth-mPowerPadding*2,mBatteryStroke/2
  102. +mPowerPadding+mPowerHeight);
  103. }
  104. @Override
  105. protectedvoidonDraw(Canvascanvas){
  106. super.onDraw(canvas);
  107. canvas.save();
  108. canvas.translate(measureWidth/2,measureHeigth/2);
  109. canvas.drawRoundRect(mBatteryRect,2f,2f,mBatteryPaint);//画电池轮廓需要考虑画笔的宽度
  110. canvas.drawRoundRect(mCapRect,2f,2f,mBatteryPaint);//画电池盖
  111. canvas.drawRect(mPowerRect,mPowerPaint);//画电量
  112. canvas.restore();
  113. }
  114. @Override
  115. protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
  116. measureWidth=MeasureSpec.getSize(widthMeasureSpec);
  117. measureHeigth=MeasureSpec.getSize(heightMeasureSpec);
  118. setMeasuredDimension(measureWidth,measureHeigth);
  119. }
  120. /**]
  121. *@category设置电池电量
  122. *@parampower
  123. */
  124. publicvoidsetPower(floatpower){
  125. mPower=power;
  126. if(mPower<0){
  127. mPower=0;
  128. }
  129. mPowerRect=newRectF(mCapWidth+mBatteryStroke/2+mPowerPadding
  130. +mPowerWidth*((100f-mPower)/100f),//需要调整左边的位置
  131. mPowerPadding+mBatteryStroke/2,//需要考虑到画笔的宽度
  132. mBatteryWidth-mPowerPadding*2,mBatteryStroke/2
  133. +mPowerPadding+mPowerHeight);
  134. invalidate();
  135. }
  136. }
代码已经注释得比较清楚了,大家自己看吧,不懂的方法可以去看一下api。

更多相关文章

  1. Android电池电量更新 - BatteryService
  2. Android(安卓)获取电池电量
  3. android典型代码系列(六)------drawable图片转换为48dip的bitmap
  4. android获取屏幕信息
  5. android 小米时钟的实现
  6. Android(安卓)获取手机的IMEI等设备信息
  7. Android(安卓)Dialog 使用 ConstraintLayout 约束布局宽度异常原
  8. Android之UI学习篇七:ImageView实现适屏和裁剪图片的功能
  9. Android实时绘制效果(二)

随机推荐

  1. Android消息处理机制——AsyncTask 源码
  2. Android基于Cling开发DLNA应用
  3. ListView的优化就这么多了
  4. Android(安卓)判断网络是否可用、网络类
  5. Android取消RecyclerView、ListView、Scr
  6. Android CountDownTimer带有动画的倒计时
  7. Android修改最小SDK版本(minSdkVersion)
  8. Android 自定义阴影效果详解及实例
  9. Android调试桥-Android Debug Birdge详解
  10. android 的事件分发从源码分析