Android 사용자 정의 컨트롤 로 구기 시합 스코어 효과 구현

본 논문 의 사례 는 안 드 로 이 드 가 구기 경기 의 스코어 효 과 를 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
효과 도 는 다음 과 같다.


이 컨트롤 은 왼쪽 점수 와 오른쪽 점 수 를 입력 해 야 합 니 다.
그리고 양쪽 의 득점 비율 에 따라 중간 점 수 를 그립 니 다.
먼저 컨트롤 의 너 비 를 평균 10 점 으로 나 누고 첫 번 째 와 마지막 부분 은 각각 왼쪽 의 점수 숫자 와 오른쪽 의 점수 숫자 를 그립 니 다.
가운데 8 점 너비 로 스코어 를 그립 니 다.
좌우 두 점수 가 차지 하 는 비율 에 따라 두 개의 첫 번 째 로 연 결 된 선분 을 그리 면 된다.
전체 코드 는 다음 과 같 습 니 다:

public class CustomScoreBar extends View {
 private Context context;
 private TypedValue typedValue;
 private static final int DEGREE =10;
 private int mColorLeft, mColorRight;
 private int mScoreLeft, mScoreRight;
 //    
 private Paint paintBar =new Paint();
 private Paint paintText=new Paint();
 public CustomScoreBar(Context context) {
 super(context);
 this.context=context;
 init();
 }
 
 public CustomScoreBar(Context context, AttributeSet attrs) {
 super(context, attrs);
 this.context=context;
 init();
 }
 
 public CustomScoreBar(Context context, AttributeSet attrs, int defStyleAttr) {
 super(context, attrs, defStyleAttr);
 this.context=context;
 init();
 }
 
 private void init() {
 //     ,    
 mColorLeft = Color.rgb(95, 112, 72);
 mColorRight = Color.rgb(69, 91, 136);
 mScoreLeft =5;
 mScoreRight =8;
 typedValue=new TypedValue();
 context.getTheme().resolveAttribute(R.attr.maintextclor,typedValue,true);
 }
 
 
 
 @Override
 protected void onDraw(Canvas canvas) {
 super.onDraw(canvas);
 float width=getWidth();
 float height=getHeight();
 //      
 paintText.reset();
 paintText.setAntiAlias(true);
 //                           
 paintText.setTextSize(Math.min(width / DEGREE, height) / 2);
 paintText.setColor(getResources().getColor(typedValue.resourceId));
 /*Paint.Align.CENTER:The text is drawn centered horizontally on the x,y origin*/
 paintText.setTextAlign(Paint.Align.CENTER);
 //          
 paintBar.reset();
 paintBar.setAntiAlias(true);
 paintBar.setStyle(Paint.Style.STROKE);
 //               
 paintBar.setStrokeWidth(height/10);
 //    
 Paint.FontMetrics fontMetrics = paintText.getFontMetrics();
 float textBaseLineOffset = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
 //         
 //       10 ,                   
 //   8        
 canvas.drawText("" + mScoreLeft, width / DEGREE / 2, height / 2 + textBaseLineOffset, paintText);
 paintBar.setColor(mColorLeft);
 // drawLine(float startX, float startY, float stopX, float stopY,Paint paint)*/
 //                  
 canvas.drawLine(width / DEGREE, height / 2, width / DEGREE + width * (DEGREE - 2) / DEGREE * mScoreLeft / (mScoreLeft + mScoreRight), height / 2, paintBar);
 //         
 fontMetrics = paintText.getFontMetrics();
 textBaseLineOffset = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom;
 //                     
 canvas.drawText("" + mScoreRight, width-width / DEGREE / 2, height / 2 + textBaseLineOffset,paintText);
 paintBar.setColor(mColorRight);
 //               
 canvas.drawLine(width/ DEGREE +width*(DEGREE -2)/ DEGREE * mScoreLeft /(mScoreLeft + mScoreRight),height/2,width*(DEGREE -1)/ DEGREE,height/2, paintBar);
 }
 
 public void setScores(int score1, int score2) {
 this.mScoreLeft =score1;
 this.mScoreRight =score2;
 invalidate();
 }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기