自定義控制元件轉盤
阿新 • • 發佈:2018-11-22
package com.lichao.bwei.com.lichao20181104s; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.view.View; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import org.w3c.dom.Text; /** * date:2018/11/4 * author:李超(li) * function: */ public class Zhuanpan extends View implements View.OnClickListener { private boolean iRote; private int mX; private int mY; private Paint mPaint; private int[] mColor; private String[] mText; public Zhuanpan(Context context) { this(context,null); } public Zhuanpan(Context context,AttributeSet attrs) { this(context, attrs,-1); } public Zhuanpan(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //找到中心點 DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); int widthPixels = displayMetrics.widthPixels; int heightPixels = displayMetrics.heightPixels; mX = widthPixels / 2; mY = heightPixels / 2; mPaint = new Paint(); mPaint.setColor(Color.RED); mPaint.setStyle(Paint.Style.FILL); mPaint.setStrokeWidth(20); mPaint.setAntiAlias(true); mText = new String[]{"100","150","140","130","120","110"}; mColor = new int[]{Color.BLACK,Color.BLUE,Color.GREEN,Color.RED,Color.BLUE,Color.RED}; this.setOnClickListener(this); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.translate(mX,mY); //畫弧 RectF rectF = new RectF(-240,-240,240,240); int start = 60; for (int i = 0; i < 6; i++) { mPaint.setColor(mColor[i]); canvas.drawArc(rectF,start*i,60,true,mPaint); } //畫中心圓 mPaint.setColor(Color.RED); canvas.drawCircle(0,0,100,mPaint); //畫中心圓內字 mPaint.setColor(Color.WHITE); mPaint.setTextSize(40); Rect rect = new Rect(); mPaint.getTextBounds("start",0,5,rect); int width = rect.width(); int height = rect.height(); canvas.drawText("start",-width/2,height/2,mPaint); //字型設定 RectF rectF1 = new RectF(-150, -150, 150, 150); for (int i = 0; i < 6; i++) { mPaint.setColor(Color.WHITE); Path path = new Path(); path.addArc(rectF1,start*i+15,60); canvas.drawTextOnPath(mText[i],path,0,0,mPaint); } } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(100,100); } @Override public void onClick(View v) { if (!iRote){ setanima(); } } private void setanima() { iRote = true; double random = Math.random(); RotateAnimation rotateAnimation = new RotateAnimation(0, (float) (720 * random), mX, mY); rotateAnimation.setDuration(8000); rotateAnimation.setFillAfter(true); rotateAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { iRote = false; } @Override public void onAnimationRepeat(Animation animation) { } }); startAnimation(rotateAnimation); } }