Android 사용자 정의 원형 진행 막대 구현
기본 적 인 사고방식 은 이렇다.
1.먼저 옹 골 진 원 을 그립 니 다.
2.흰색 옹 골 진 정사각형 을 그 려 옹 골 진 원 을 가린 다
3.원 의 중심 에 현재 진도 의 백분율 문 자 를 동적 으로 그립 니 다.
4.속 이 꽉 찬 원 과 같은 색 의 빈 원 을 그립 니 다.
5.현재 의 백분율 을 점차 변경
6.백분율 에 따라 정사각형 의 크기 를 점차적으로 바 꾸 고 정사각형 의 밑부분 y 축의 좌 표를 점점 줄 이 며 100%에 이 를 때 까지 계속 다시 그립 니 다.
우선 사용자 정의 속성 을 봅 니 다.
values 디 렉 터 리 에 새 attrs.xml 내용 은 다음 과 같 습 니 다.
원형 을 그 리 는 배경 색 과 원형 을 그 리 는 반지름 크기 를 정의 합 니 다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="circlecolor" format="color"></attr>
<attr name="half" format="dimension"></attr>
<declare-styleable name="myCircleImage">
<attr name="circlecolor"></attr>
<attr name="half"></attr>
</declare-styleable>
</resources>
사용자 정의 보기
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
public class CirclePro extends View {
private Paint paint;
private int circleBack;//
private int mschedual = 0;//
float circleHalf; //
String percent = "";//
@SuppressLint("Recycle")
public CirclePro(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.myCircleImage, defStyleAttr,0);
@SuppressWarnings("unused")
int leng = array.length();
// , R.styleable.myCircleImage_circlecolor R.attr.circlecolor
circleBack = array.getColor(R.styleable.myCircleImage_circlecolor,Color.GREEN);
circleHalf = array.getDimension(R.styleable.myCircleImage_half,200.f);
System.out.println(circleBack);
}
/**
* , view ,
* @param context
* @param attrs
*/
public CirclePro(Context context, AttributeSet attrs) {
this(context, attrs, 0);//
}
/**
*
* @param text
* @param textSize
* @return
*/
public float getTextWidth(String text,float textSize) {
TextPaint textPaint = new TextPaint();
textPaint.setTextSize(textSize);
return textPaint.measureText(text);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
float height = getHeight();
float width = getWidth();
// float circleHalf = (float) (width*0.7/2);
paint.setColor(circleBack);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(width/2,height/2,circleHalf, paint);//
if (mschedual <= 100) {//, 100,
paint.setColor(Color.WHITE);
canvas.drawRect(width/2-circleHalf,height/2-circleHalf,width/2+circleHalf,height/2+circleHalf - mschedual*circleHalf/50, paint);
}
//
paint.setColor(Color.BLACK);
paint.setTextSize(30.f);
percent = mschedual+" %";
canvas.drawText(percent, width/2-getTextWidth(percent,30)/2,height/2+paint.getTextSize()*3/8, paint);// =paint.getTextSize()*3/4
//
paint.setColor(circleBack);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(width/2,height/2,circleHalf, paint);
if (mschedual < 100) {// ,
mschedual++;
invalidate();
}
}
}
activitymain.xml 에 서 는 사용자 정의 속성 을 사용 해 야 합 니 다.먼저 네 임 스페이스 를 추가 합 니 다:xmlns:liu="http://schemas.android.com/apk/res/com.example.androidcirclepro”그 중에서 liu 는 사용자 정의 접두사 로 임의로 이름 을 지 었 습 니 다.com.example.androidcirclepro 는 우리 가 사용 하 는 패키지 이름 입 니 다.
activity_main.xmln 내용 은 다음 과 같 습 니 다.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:liu="http://schemas.android.com/apk/res/com.example.androidcirclepro"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.example.androidcirclepro.CirclePro
android:layout_width="match_parent"
android:layout_height="match_parent"
liu:half="90dp"
liu:circlecolor="#fff0f0"
/>
</RelativeLayout>
이로써 사용자 정의 원형 진도 가 완성 되 었 습 니 다.간단 하지 않 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.