1. 程式人生 > >自定義View——幸運轉盤

自定義View——幸運轉盤

1,第一步 建立一個Class 繼承View
public class zhuanpan extends View implements View.OnClickListener {
private Paint mPaint;
private int mWidth;
private Context mcontext;
private String[] contents = new String[]{“iPhoneX”, “送購物券”, “送家電”, “馬爾地夫三日遊”, “演唱會門票”, “寫真照”,“30G流量”,“騰訊會員”};
public int[] colors = new int[]{Color.parseColor("#8EE5EE"), Color.parseColor("#FFD700"), Color.parseColor("#FFD39B"), Color.parseColor("#FF8247"), Color.parseColor("#FF34B3"), Color.parseColor("#F0E68C"),Color.parseColor("#FFD39B"), Color.parseColor("#FF8247")};
private int start;
private boolean first = true;

public zhuanpan(Context context, AttributeSet attrs) {
    super(context, attrs);
    mPaint=new Paint();
    mcontext=context;
    setOnClickListener(this);

}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //設定線條顏色
    mPaint.setColor(Color.BLUE);
    //設定字型大小
    mPaint.setTextSize(30);
    //設定空心
    mPaint.setStyle(Paint.Style.STROKE);
    //設定局齒輪
    mPaint.setAntiAlias(true);
    //設定空心線條的粗細
    mPaint.setStrokeWidth(4);
    //設定圓
    canvas.drawCircle(mWidth/2,mWidth/2,300,mPaint);


    //畫扇形
    RectF rectF=new RectF(0,0,mWidth,mWidth);
    //設定實心
    mPaint.setStyle(Paint.Style.FILL);
    //填充顏色
    for(int i=0;i<colors.length;i++)
    {
        mPaint.setColor(colors[i]);
        int jd=i*45;
        canvas.drawArc(rectF,jd,45,true,mPaint);
    }


    mPaint.setColor(Color.BLACK);
    mPaint.setTextSize(35);
    for(int i=0;i<contents.length;i++)
    {
        int jd=i*45;
        Path path=new Path();
        path.addArc(rectF,jd,45);
        canvas.drawTextOnPath(contents[i],path,60,60,mPaint);
    }

  /*  canvas.drawLine(0,200,300,mWidth/2,mPaint);*/




}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    setMeasuredDimension(600,600);
    mWidth=getMeasuredWidth();
}

@Override
public void onClick(View v) {
    Random random = new Random();
    int i = random.nextInt(3600);
    int j = random.nextInt(6666);

    RotateAnimation rotate = null;
    if (first){

        rotate=new RotateAnimation(0,i,mWidth/2,mWidth/2);
        start = i;
        first = false;
    }else {
        rotate=new RotateAnimation(start,i,mWidth/2,mWidth/2);
        int i1 = i % 360;
        start = i1;
    }


    //保留最後的位置 不回到原位
    rotate.setFillAfter(true);
    rotate.setDuration(j);
    rotate.setRepeatMode(0);
    rotate.setInterpolator(new LinearInterpolator());
    startAnimation(rotate);


}

}

2,第二步 在activity_main.xml中引入
<com.example.zhuanpan.zhuanpan
android:id="@+id/zp"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_centerInParent=“true”/>
可以在activity_main.xml這裡自己新增一個指標圖片

效果圖
在這裡插入圖片描述