轉盤-----自畫圓
阿新 • • 發佈:2018-11-17
action_main
<wanghuiqi.bawie.com.whq_week_lx.LuckyDics
android:id="@+id/lucky"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
LuckyDisc
package wanghuiqi.bawie.com.whq_week_lx;
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;
public class LuckyDics extends View implements View.OnClickListener { private int mXCenter; private int mYCenter; private Paint mPaint; private int[] mColor = new int[]{Color.GREEN, Color.YELLOW, Color.GREEN, Color.YELLOW, Color.GREEN, Color.YELLOW}; private RotateAnimation mRotate; private String mStr[]=new String[]{"蛋撻","火鍋","麻辣燙","榴蓮蛋糕","烤肉","恭喜發財"}; public LuckyDics(Context context) { this(context, null); } public LuckyDics(Context context, AttributeSet attrs) { this(context, attrs, 0); } public LuckyDics(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //獲取螢幕的寬和高 DisplayMetrics metrics = context.getResources().getDisplayMetrics(); int width = metrics.widthPixels; int heigth = metrics.heightPixels; //獲取螢幕的中心軸 mXCenter = width / 2; mYCenter = heigth / 2; //初始化畫筆 initPaint(); //初始化動畫 initDraw(); setOnClickListener(this); } //設定動畫 private void initDraw() { mRotate = new RotateAnimation(0, 360, mXCenter, mYCenter); //設定時間 mRotate.setDuration(1000); //重複次數 mRotate.setRepeatCount(-1); //控制元件動畫結束時,是否保持動畫最後的狀態 mRotate.setFillAfter(true); mRotate.setInterpolator(new LinearInterpolator()); //重複型別有兩個,reverse表示倒序回放,restart表示從頭播放 mRotate.setRepeatMode(Animation.RESTART); } //初始化畫筆 private void initPaint() { mPaint = new Paint(); //mPaint.setColor(Color.GRAY); //設定樣式 mPaint.setStyle(Paint.Style.FILL); //設定畫筆寬 mPaint.setStrokeWidth(20); //抗鋸齒 mPaint.setAntiAlias(true); } //繪製 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.translate(mXCenter, mYCenter); //畫圓()引數:X,Y軸,半徑,畫筆 // canvas.drawCircle(0,0,50,mPaint); RectF rectF = new RectF(-300, -300, 300, 300); for (int i = 0; i < 6; i++) { //設定每個盤塊畫筆的顏色 mPaint.setColor(mColor[i]); canvas.drawArc(rectF, 60 * i, 60, true, mPaint); } mPaint.setColor(Color.RED); //點選抽獎的圓 canvas.drawCircle(0, 0, 50, mPaint); mPaint.setColor(Color.WHITE); mPaint.setTextSize(25); Rect rect = new Rect(); mPaint.getTextBounds("start",0,5,rect); int rectWidth = rect.width(); int rectHeigth = rect.height(); //繪製text文字 canvas.drawText("start",-rectWidth/2,rectHeigth/2,mPaint); RectF rectFText = new RectF(-200, -200, 200, 200); for (int i=0;i<6;i++){ mPaint.setColor(Color.BLUE); Path path = new Path(); path.addArc(rectFText,60*i+20,60); canvas.drawTextOnPath(mStr[i],path,0,0,mPaint); } } private boolean flag; @Override public void onClick(View v) { if (flag) { luckyEnd(); random(); } else { luckyStart(); } } public void luckyEnd() { flag = false; clearAnimation(); } public void luckyStart() { flag = true; startAnimation(mRotate); } public void random() { double random = Math.random(); RotateAnimation rotateAnimation = new RotateAnimation(0, (float) (360 * random), mXCenter, mYCenter); rotateAnimation.setDuration(1000); startAnimation(rotateAnimation); //不掉幀 rotateAnimation.setFillAfter(true); } }