Android 사용자 정의 원점 이 있 는 반원형 진도 막대

5933 단어 Android진도 표
본 논문 의 사례 는 안 드 로 이 드 사용자 정의 원점 이 있 는 반원형 진도 바 를 공유 하여 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
반원형 에 만 사용 할 수 있 습 니 다.만약 에 원점 이 있 는 원형 진도 조 가 필요 하 다 면 원점 은 잘못된 현상 이 발생 할 수 있 습 니 다.이 코드 는 원점 이 있 는 원형 진도 조 가 시간 이 있 으 면 연구 할 수 있 습 니 다!그림 효 과 는 아래,

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

/**
 *           
 */
public class HalfProgressBar extends View{
 private int maxProgress = 100;
 //         
 private float progressStrokeWidth = 3;
 //         
 private float marxArcStorkeWidth = 6;
 //          
 private float circularDotWidth=15;


 /**
  *        
  */
 private Paint paint;

 public synchronized int getProgress() {
  return progress;
 }

 /**
  * Android   Invalidate        ,  Invalidate          ,            :Android UI          ,         UI     。
  *  postInvalidate()             postInvalidate     ,   handler,        postInvalidate  。 
  * @param progress       
  */
 public void setProgress(int progress) {
  if (progress < 0) {
   progress = 0;
  }
  if (progress > maxProgress) {
   progress = maxProgress;
  }
  if (progress <= maxProgress) {
   this.progress = progress;
   postInvalidate();
  }
 }
 /**
  *     
  */
 private int progress = 99;

 private RectF oval;
 private int roundProgressColor;
 private int roundColor;
 private int circularDotColor;
 public HalfProgressBar(Context context) {
  super(context);
 }

 public HalfProgressBar(Context context, AttributeSet attrs) {
  super(context, attrs);
  paint = new Paint();
  oval = new RectF();
  //     view      
  TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.HalfProgressBar);
  roundProgressColor = mTypedArray.getColor(R.styleable.HalfProgressBar_roundProgressColor1, Color.YELLOW);
  roundColor=mTypedArray.getColor(R.styleable.HalfProgressBar_roundColor1, Color.YELLOW);
  circularDotColor=mTypedArray.getColor(R.styleable.HalfProgressBar_circularDotColor1, Color.YELLOW);

 }

 public HalfProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  paint = new Paint();
  oval = new RectF();
  TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.HalfProgressBar);
  roundProgressColor = mTypedArray.getColor(R.styleable.HalfProgressBar_roundProgressColor1, Color.YELLOW);
  roundColor=mTypedArray.getColor(R.styleable.HalfProgressBar_roundColor1, Color.YELLOW);

 }

 @Override
 protected void onDraw(Canvas canvas) {
  // TODO          
  super.onDraw(canvas);
  float width = getWidth();
  float height = getHeight();
  paint.setAntiAlias(false); //         
  paint.setColor(roundColor); //       

  paint.setStrokeWidth(progressStrokeWidth); //   
  paint.setStyle(Paint.Style.STROKE);

  oval.left = marxArcStorkeWidth / 2; //    x
  oval.top = circularDotWidth; //    y
  oval.right = width - circularDotWidth / 2; //    x
  oval.bottom = width - circularDotWidth / 2; //    y
  float bangjing = ((width - circularDotWidth/2) / 2);//  


  //        
  canvas.drawArc(oval, 180, 180, false, paint); //       ,      
  //     
  paint.setColor(roundProgressColor);
  paint.setStrokeWidth(marxArcStorkeWidth);
  canvas.drawArc(oval, 180, 180 * ((float) progress / (float) maxProgress), false, paint); //       ,     


  //   
  paint.setColor(circularDotColor);
  paint.setAntiAlias(true); //         
  paint.setStyle(Paint.Style.FILL);
  paint.setStrokeWidth(circularDotWidth);
  //      STROKE FILL_OR_STROKE ,         ,     Cap.ROUND,     Cap.SQUARE
  paint.setStrokeCap(Paint.Cap.ROUND);
  float jindu = ((float) progress * 1.8f);
  canvas.drawPoint(bangjing - ((float) (Math.sin((Math.PI / (double) 180) * (jindu <= 90 ? 90 - (jindu) : -jindu + 90))) * bangjing),
   bangjing+circularDotWidth - ((float) (Math.cos((Math.PI / (double) 180) * (double) (jindu <= 90 ? 90 - jindu : -jindu + 90))) * bangjing), paint);

 }

}
attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <!--           -->
 <declare-styleable name="HalfProgressBar">
  <attr name="roundColor1" format="color"/>
  <attr name="roundProgressColor1" format="color"/>
  <attr name="circularDotColor1" format="color"/>
 </declare-styleable>
</resources>
xml 중

<com.jyc99.demo.HalfProgressBar
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:id="@+id/view"
  android:layout_centerHorizontal="true"
  android:layout_marginTop="42dp"
  android_custom:roundColor1="#fc422b"
  android_custom:roundProgressColor1="#fa432e"
  android_custom:circularDotColor1="#246223"/>
캡 처 로 인해 원점 이 보이 지 않 을 수 있 으 니,여러분 스스로 색상 을 조절 하여 높이 와 폭 을 조절 해 보 세 요.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기