カスタムView-ラッキーホイール

4035 ワード

Android Studioで提供されているコントロールが機能のニーズを満たすことができない場合がありますが、ラッキーなホイールの機能を作る必要があります.この場合、Androidの知識点であるカスタムViewを使用する必要があります.
コードを書く前にこの考えを整理しましょう
1.データ2を定義する.円を描く円弧を描き、色の区別4を設定します.各弧度にデータを上5に置く.ポインタが選択する位置6を設定する.アニメーション-回転アニメーションを使用して、カスタムViewを回転します.乱数の定義は、1回の移動回数を表します.
これは私のレイアウトです.



    

    




ここはカスタムビューのコードです
public class View_DLP extends View implements View.OnClickListener{private String[]contents=new String[]{「美女」「女神」「ホットダンス」「豊満」「セクシー」「知性」};public int[] colors = new int[]{Color.parseColor("#8EE5EE"), Color.parseColor("#FFD700"), Color.parseColor("#FFD39B"), Color.parseColor("#FF8247"), Color.parseColor("#FF34B3"), Color.parseColor("#F0E68C")}; public String centerText = “start”; private int mWidth; private Paint mPaint; private Context mContext; private RotateAnimation rotateAnimation; private float newdul;
public View_DLP(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);

    this.mContext = context;
    mPaint = new Paint();
    setOnClickListener(this);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //      
    mPaint.setColor(Color.YELLOW);
    //  
    canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, 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]);
        //     60
        int startjd = i * 60;
        canvas.drawArc(rectF, startjd, 60, true, mPaint);
    }

    //        
    mPaint.setColor(Color.RED);
    mPaint.setTextSize(25);
    //    
    for (int i = 0; i < contents.length; i++) {
        int startjd = i * 60;
        Path path = new Path();
        //     rectF ,startjd        , 60        
        path.addArc(rectF,startjd,60);
        //             
        canvas.drawTextOnPath(contents[i],path,50,50,mPaint);
    }

    mPaint.setColor(Color.GREEN);
    canvas.drawCircle(mWidth / 2,mWidth / 2, 50,mPaint);
    mPaint.setColor(Color.BLACK);
    mPaint.setTextSize(24);
    Rect rect = new Rect();
    mPaint.getTextBounds(centerText, 0, centerText.length(), rect);
    int textWidth = rect.width();
    int textHeight = rect.height();
    canvas.drawText(centerText, mWidth / 2 - textWidth / 2, mWidth / 2 + textHeight / 2, mPaint);
}

//       
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    //super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(300, 300);
    //                                getMeasuredWidth()  
    mWidth = getMeasuredWidth();
}

@Override
public void onClick(View view) {
    //Random         
    Random random = new Random();
    //nextInt        0-1000  
    float dul = random.nextInt(1000);
    //                                            
    //rotateAnimation = new RotateAnimation(newdul, dul, mWidth / 2,mWidth / 2);
    rotateAnimation = new RotateAnimation(newdul, dul+1000, mWidth / 2, mWidth / 2);
    rotateAnimation.setFillAfter(true);
    rotateAnimation.setDuration(3000);
    startAnimation(rotateAnimation);
    //                                
    newdul = dul % 360 +1000;
 } 

}
まだ理解していない場合は、コードアドレスを参照してください.https://github.com/qq1341738311/zdyView_TheLuckyRoller