通過學習《android開發(fā)藝術探索》和《android群英傳》尊惰,還有一些著名博客的學習讲竿,寫一些自學的過程和小列子。
直接上圖:
1.gif
- 把自定義的view進行分析,首先中間有一個文字,內(nèi)容是一個隨機數(shù)竭沫,當進行點擊事件時,里面的數(shù)字會發(fā)生改變迈嘹,而且外圍的弧線的弧度隨著數(shù)字而重繪invalidate(),不過因為數(shù)字的精度不夠全庸,所以還有待改進秀仲。
public class DrawArc extends View{
int x=100;
String text="36";
public DrawArc(Context context) {
super(context);
}
public DrawArc(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DrawArc(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width=getWidth();
int height=getHeight();
//繪制實心圓s
Paint paint2=new Paint();
paint2.setStyle(Paint.Style.FILL);//FILL設置畫筆為實心,畫出的圓是實心圓壶笼,STROKE則是一個圓圈
paint2.setColor(Color.YELLOW);
canvas.drawCircle(width/2,width/2,200,paint2);
//繪制文字
Paint paint3=new Paint();
paint3.setStyle(Paint.Style.STROKE);
paint3.setColor(Color.BLACK);
paint3.setTextSize(150);
Paint paint5=new Paint();
paint5.setStyle(Paint.Style.STROKE);
paint5.setColor(Color.BLACK);
paint5.setTextSize(50);
canvas.drawText(text,(width/2-115),width/2+50,paint3);
canvas.drawText("%",(width/2+50),width/2+50,paint5);
//繪制圓弧
Paint paint=new Paint();
paint.setColor(Color.YELLOW);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(90);
Paint paint4=new Paint();
paint4.setColor(Color.GREEN);
paint4.setStyle(Paint.Style.STROKE);
paint4.setStrokeWidth(90);
RectF rectF2=new RectF(300,300,width-300,width-300);//設置圓弧所在的外接圓的矩形
canvas.drawArc(rectF2, //圓弧所在的橢圓對象
0, //圓弧的起始角度
x, //圓弧的角度
false, //是否顯示半徑連接線神僵,true表示顯示圓弧與圓心半徑連線,false表示不顯示
paint4
);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
x= (int) (Math.random()*1000);
x=x%360;
System.out.println(x);
int y=x/36*10;
text=y+"";
invalidate();
}
return super.onTouchEvent(event);
}}
各位看官如果有意見或者更好的方法歡迎留言評論覆劈。保礼。。责语。
7d63fb4f94207c050d182220c0e50617.jpg