项目中有用到抽奖转盘,网上找的demo有些不合设计的要求(不能随意添加转盘中item的个数,不能以上层view滚动等),于是自己尝试写了个自定义的抽奖转盘,方便以在别的项目中更改使用,大致的效果如下图:
这是为点击抽奖之前的效果
整体的思路是下边是一个可以任意添加item的自定义的view,上部份是一张图片,点击图片的时候让图片开始Rotate动画效果,转动到特定的item那里
1.自定义view:
Turnplate
package com.example.hp.loading; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.graphics.Typeface; import android.os.Build; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.WindowManager; import java.util.ArrayList; import java.util.List; /** * Created by hp on 2016/9/5. * 转盘 */ public class Turnplate extends View{ private Context context; private final float StrarLocation=270; private Paint paint; private float mRadios;//绘制的角度 private List<String> listText;//显示的文字 private List<Float>listRadios;//每个特定弧度的中心位置 private int mCount;//绘制的次数 private List<Integer>listColor;//每个弧度的颜色(最大数目10个) public Turnplate(Context context, AttributeSet attrs) { super(context, attrs); this.context=context;//此构造方法会在xml生成时调用,而不是在Activity使用中调用 paint=new Paint(); paint.setAntiAlias(true); Path path=new Path();//初始化路径path listText=new ArrayList<>(); listRadios=new ArrayList<>(); listColor=new ArrayList<>();//测试用的颜色,方便给每个item添加不同颜色 listColor.add(0xFF0b87f4);//色值不能在此引用xml中的数据,否则不起效果,必须以16进制形式添加 listColor.add(0xFFc316de); listColor.add(0xFFcbce25); listColor.add(0xFFf47378); listColor.add(0xFF18dfd8); listColor.add(0xFF7d1ed1); listColor.add(0xFFe6a1ef); listColor.add(0xFFfdd700); listColor.add(0xfba0ec25); } public Turnplate(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (listText!=null&&listText.size()>0){ //初始化绘制文字的画笔 Paint mTextPaint=new Paint(); mTextPaint.setColor(Color.