コード例 #1
0
 /**
  * 绘制进度界面
  *
  * @param canvas
  */
 private void drawProgress(Canvas canvas) {
   if (type != TYPE_LOADING & oldType != TYPE_LOADING) {
     return; // 如果与自己不相关就返回
   }
   drawType = false;
   // 画背景色
   if (!option.isProgressCenterLucency()) {
     canvas.drawCircle(width / 2, height / 2, radius, progressCenterPaint);
   }
   // 画背景图
   if (!option.isProgressCenterLucency() && option.getBtnProgressCenterImage() > 0) {
     canvas.drawBitmap(
         createBitmap(
             BitmapFactory.decodeResource(getResources(), option.getBtnProgressCenterImage()),
             radius * 2,
             radius * 2,
             radius),
         width / 2 - radius,
         height / 2 - radius,
         null);
   }
   progressPaint.setStrokeWidth(option.getBtnProgressWidth() * radius);
   progressBgPaint.setStrokeWidth(option.getBtnProgressWidth() * radius);
   canvas.drawCircle(width / 2, height / 2, radius, progressBgPaint);
   RectF rectF =
       new RectF(width / 2 - radius, height / 2 - radius, width / 2 + radius, height / 2 + radius);
   if (type == TYPE_LOADING && oldType != TYPE_LOADING && oldType != TYPE_PREPARE) {
     int r = 0;
     if (width > height) {
       r = (int) (height * 0.4);
     } else {
       r = (int) (width * 0.4);
     }
     if (radius < r) {
       radius += (r * 0.1);
     } else {
       radius = r;
       oldType = type;
     }
     // invalidate();
   } else if (type == TYPE_LOADING && (oldType == TYPE_LOADING || oldType == TYPE_PREPARE)) {
     oldType = type;
     isEnd = false;
     if (allNum <= 0 || proNum <= 0) {
       return;
     } else {
       //				if(Math.abs(proNum - proIndex) < allNum / 100){
       //					proIndex = proNum;
       //				}
       canvas.drawArc(rectF, -90, 360 * proIndex / allNum, false, progressPaint);
       String text = ((int) (proIndex / allNum * 100)) + "%";
       // 画字
       if (text != null && text.length() > 0 && option.isShowPercent()) {
         int textSize;
         textSize = (int) (radius * 2 * 0.3);
         if (textSize * text.length() > (radius * 2)) {
           textSize = (int) ((radius * 2) / text.length() * 0.8);
         }
         progressTextPaint.setTextSize(textSize);
         FontMetrics fm = progressTextPaint.getFontMetrics();
         float textY = -fm.descent + (fm.descent - fm.ascent) / 2;
         canvas.drawText(text, width / 2, height / 2 + textY, progressTextPaint);
       }
       if (proIndex < proNum) {
         proIndex += allNum * 0.01;
         if (Math.abs(proNum - proIndex) < allNum * 0.01) {
           proIndex = proNum;
         }
       } else if (proIndex > proNum) {
         proIndex -= proNum * 0.01;
         if (Math.abs(proNum - proIndex) < allNum * 0.01) {
           proIndex = proNum;
         }
       } else {
         return;
       }
     }
   } else if (oldType == TYPE_LOADING) {
     canvas.drawArc(rectF, -90, 360 * proIndex / allNum, false, progressPaint);
     if (!isEnd) {
       int r = 0;
       if (width > height) {
         r = (int) (height * 0.4);
       } else {
         r = (int) (width * 0.4);
       }
       if (radius > 0) {
         radius -= (r * 0.1);
       } else {
         radius = 0;
         index = 0;
         isEnd = true;
       }
     } else {
       drawType = true;
     }
     // invalidate();
   }
   invalidate();
 }