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"/>
캡 처 로 인해 원점 이 보이 지 않 을 수 있 으 니,여러분 스스로 색상 을 조절 하여 높이 와 폭 을 조절 해 보 세 요.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.