안 드 로 이 드(Android)개발 의 사용자 정의 떡 모양 그림
먼저 떡 모양 그림 의 구성 을 분석 하면 매우 뚜렷 하 다.떡 모양 그림 은 하나의 부채 형 으로 구성 되 고 모든 부채 형 은 서로 다른 색깔 이 있 으 며 해당 하 는 이름,데이터 와 백분율 이 있다.
상기 정 보 를 통 해 떡 모양 그림 의 가장 기본 적 인 데 이 터 는 이름 데이터 값 백분율 에 대응 하 는 각도 색 을 포함해 야 한다.
사용자 관심 데이터:이름 데이터 값 백분율
프로그램 계산 이 필요 한 데이터:백분율 대응 각도
색상
public class PieData {
private String name; //
private float value; //
private float percentage; //
private int color = 0; //
private float angle = 0; //
public PieData(@NonNull String name, @NonNull float value) {
this.name = name;
this.value = value;
}
}
사용자 정의 뷰:먼저 사용자 정의 View 프로 세 스에 따라 한 번 정리 합 니 다(각 단계 에서 해 야 할 일 을 확인 합 니 다).
순서
키워드
역할.
1
구조 함수
초기 화(펜 페인트 초기 화)
2
onMeasure
View 의 크기 측정(당분간 관심 없 음)
3
onSizeChanged
View 크기 확인(현재 View 의 너비 기록)
4
nLayout
하위 뷰 레이아웃 확인(하위 뷰 없 음,관심 없 음)
5
onDraw
실제 내용 그리 기(떡 모양 그림 그리 기)
6
인 터 페 이 스 를 제공 하 다
인터페이스 제공(데이터 설정 인터페이스 제공)
코드 는 다음 과 같 습 니 다:
public class PieView extends View {
//
private int[] mColors = {0xFFCCFF00, 0xFF6495ED, 0xFFE32636, 0xFF800000, 0xFF808000, 0xFFFF8C69, 0xFF808080,
0xFFE6B800, 0xFF7CFC00};
//
private float mStartAngle = 0;
//
private ArrayList<PieData> mData;
//
private int mWidth, mHeight;
//
private Paint mPaint = new Paint();
public PieView(Context context) {
this(context, null);
}
public PieView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint.setStyle(Paint.Style.FILL);
mPaint.setAntiAlias(true);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mWidth = w;
mHeight = h;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (null == mData)
return;
float currentStartAngle = mStartAngle; //
canvas.translate(mWidth / 2, mHeight / 2); //
float r = (float) (Math.min(mWidth, mHeight) / 2 * 0.8); //
RectF rect = new RectF(-r, -r, r, r); //
for (int i = 0; i < mData.size(); i++) {
PieData pie = mData.get(i);
mPaint.setColor(pie.getColor());
canvas.drawArc(rect, currentStartAngle, pie.getAngle(), true, mPaint);
currentStartAngle += pie.getAngle();
}
}
//
public void setStartAngle(int mStartAngle) {
this.mStartAngle = mStartAngle;
invalidate(); //
}
//
public void setData(ArrayList<PieData> mData) {
this.mData = mData;
initDate(mData);
invalidate(); //
}
//
private void initDate(ArrayList<PieData> mData) {
if (null == mData || mData.size() == 0) //
return;
float sumValue = 0;
for (int i = 0; i < mData.size(); i++) {
PieData pie = mData.get(i);
sumValue += pie.getValue(); //
int j = i % mColors.length; //
pie.setColor(mColors[j]);
}
float sumAngle = 0;
for (int i = 0; i < mData.size(); i++) {
PieData pie = mData.get(i);
float percentage = pie.getValue() / sumValue; //
float angle = percentage * 360; //
pie.setPercentage(percentage); //
pie.setAngle(angle); //
sumAngle += angle;
Log.i("angle", "" + pie.getAngle());
}
}
메모:데 이 터 를 변경 할 때 화면 을 다시 그 려 야 할 때 invalidate()함수 로 다시 그 려 야 합 니 다.이상 은 여러분 을 위해 정리 한 안 드 로 이 드(Android)에서 떡 모양 그림 을 사용자 정의 하 는 제작 방향 입 니 다.인 스 턴 스 코드 를 이용 하여 떡 모양 그림 을 실현 하 는 것 이 간단 합 니 다.본 고 는 안 드 로 이 드(Android)를 개발 하 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.