android绘制进度条

小鱼儿 2022-08-08 12:57 313阅读 0赞

public class MainActivity extends Activity {

  1. private CircleProgress cp;
  2. private ImageView iv;
  3. int finish = 80;
  4. private int centerX,centerY;
  5. private int textSize = 38;
  6. private int roundWidth = 14;
  7. private float finished =80,unfinished = 20;
  8. Paint paint;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) \{
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.login\_activity);
  13. cp = (CircleProgress) this.findViewById(R.id.cp\_home);
  14. iv=(ImageView) this.findViewById(R.id.iv);
  15. if(iv == null)\{
  16. Log.v("iv", "null");
  17. return;
  18. \}
  19. drawProgress();
  20. \}
  21. public void drawCircle(View view)\{
  22. cp.setProgress(finish,100 - finish);
  23. finish--;
  24. \}
  25. private void drawProgress()\{
  26. Bitmap bitmap1 = null;
  27. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.chart\_bg).
  28. copy(Bitmap.Config.ARGB\_8888, true);
  29. bitmap1 = Bitmap.createBitmap(bitmap);
  30. centerX = bitmap1.getWidth()/2;
  31. centerY = bitmap1.getHeight()/2;
  32. Canvas canvas = new Canvas(bitmap1);
  33. paint = new Paint();
  34. drawText(canvas);
  35. drawTaskFinish(canvas);
  36. drawTaskUnfinish(canvas);
  37. iv.setImageBitmap(bitmap1);
  38. \}
  39. private void drawText(Canvas canvas)\{
  40. //半径
  41. int radius = (int)(centerX - roundWidth/2);
  42. paint.setColor(Color.parseColor("\#3061AE"));
  43. paint.setStrokeWidth(0);
  44. paint.setTextSize(textSize);
  45. paint.setTypeface(Typeface.DEFAULT\_BOLD); //设置字体
  46. int percent = (int)((finished / (finished + unfinished)) \* 100);
  47. float textWidth = paint.measureText(percent + "%");
  48. canvas.drawText(percent + "%", centerX - textWidth / 2, centerY + textSize/3, paint);
  49. paint.setStrokeWidth(roundWidth); //设置圆环的宽度
  50. paint.setColor(Color.parseColor("\#FF721A")); //设置进度的颜色
  51. paint.setStyle(Style.STROKE);
  52. RectF oval = new RectF(centerX - radius, centerY - radius, centerX
  53. + radius, centerY + radius);
  54. if(percent >0)\{
  55. //根据进度画圆弧,同时改变起始角度,进行绘制
  56. canvas.drawArc(oval, -90, 360 \* percent/100, false, paint);
  57. \}
  58. \}
  59. /\*\*
  60. \* 绘制完成任务的形状
  61. \* @param canvas
  62. \*/
  63. private void drawTaskFinish(Canvas canvas)\{
  64. if(finished <=0)\{
  65. return;
  66. \}
  67. int centerFinishX = (int) (centerX + centerX \* 0.6);
  68. paint.setColor(Color.parseColor("\#FF721A"));
  69. paint.setStyle(Paint.Style.FILL\_AND\_STROKE);
  70. canvas.drawCircle(centerFinishX, centerFinishX, 20, paint);
  71. paint.setColor(Color.WHITE);
  72. paint.setStrokeWidth(0);
  73. paint.setTextSize(12);
  74. paint.setTypeface(Typeface.DEFAULT\_BOLD);
  75. float textWidth = paint.measureText(finished + "万");
  76. canvas.drawText(finished + "万", centerFinishX - textWidth / 2,
  77. centerFinishX + 6, paint);
  78. \}
  79. /\*\*
  80. \* 绘制未完成的任务图形
  81. \* @param canvas
  82. \*/
  83. private void drawTaskUnfinish(Canvas canvas)\{
  84. if(unfinished <=0)\{
  85. return;
  86. \}
  87. int centerUnfinishX = (int) (centerX - centerX \* 0.6);
  88. paint.setColor(Color.parseColor("\#1FC2F3"));
  89. paint.setStyle(Paint.Style.FILL\_AND\_STROKE);
  90. canvas.drawCircle(centerUnfinishX, centerUnfinishX, 20, paint);
  91. paint.setColor(Color.WHITE);
  92. paint.setStrokeWidth(0);
  93. paint.setTextSize(12);
  94. paint.setTypeface(Typeface.DEFAULT\_BOLD);
  95. float textWidth = paint.measureText(unfinished + "万");
  96. canvas.drawText(unfinished + "万", centerUnfinishX - textWidth / 2,
  97. centerUnfinishX + 6, paint);
  98. \}

}

发表评论

表情:
评论列表 (有 0 条评论,313人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Android进度

    ProgressBar:进度条。系统提供四种类型进度条,大、中、小圆形进度条和条形进度条 更换成条形进度条类型的代码: ![Center][] 实现进度条还需在ja