Android 实现九宫格抽奖功能

这篇文章主要介绍了Android 实现九宫格抽奖功能,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

效果展示

实现步骤

1.生成抽奖矩形:

其中每个矩形的宽高相同,长度为整个控件宽度的1/3。

代码展示

 public class NineLuckPan extends View { private Paint mPaint; private ArrayList mRects;//存储矩形的集合 private float mStrokWidth = 5;//矩形的描边宽度 private int mRectSize;//矩形的宽和高(矩形为正方形) private int[] mItemColor = {Color.GREEN, Color.YELLOW};//矩形的颜色 public NineLuckPan(Context context) { this(context, null); } public NineLuckPan(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public NineLuckPan(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } /** * 初始化数据 */ private void init() { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.FILL); mPaint.setStrokeWidth(mStrokWidth); mRects = new ArrayList<>(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mRectSize = Math.min(w, h) / 3;//获取矩形的宽和高 mRects.clear();//当控件大小改变的时候清空数据 initRect();//重新加载矩形数据 } /** * 加载矩形数据 */ private void initRect() { //加载前三个矩形 for (int x = 0; x <3; x++) { float left = x * mRectSize; float top = 0; float right = (x + 1) * mRectSize; float bottom = mRectSize; RectF rectF = new RectF(left, top, right, bottom); mRects.add(rectF); } //加载第四个 mRects.add(new RectF(getWidth() - mRectSize, mRectSize, getWidth(), mRectSize * 2)); //加载第五~七个 for (int y = 3; y > 0; y--) { float left = getWidth() - (4 - y) * mRectSize; float top = mRectSize * 2; float right = (y - 3) * mRectSize + getWidth(); float bottom = mRectSize * 3; RectF rectF = new RectF(left, top, right, bottom); mRects.add(rectF); } //加载第八个 mRects.add(new RectF(0, mRectSize, mRectSize, mRectSize * 2)); //加载第九个 mRects.add(new RectF(mRectSize, mRectSize, mRectSize * 2, mRectSize * 2)); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawRects(canvas); } /** * 画矩形 * * @param canvas */ private void drawRects(Canvas canvas) { for (int x = 0; x 

效果展示

2.添加奖品图片:

我们在矩形的中心点画出图片,图片的宽高都为矩形宽高的1/2,其中矩形的中心点通过rectF.centerX()和rectF.centerY()获取。

代码展示(为了方便只展示部分代码)

 public class NineLuckPan extends View { private int[] mImgs = {R.drawable.ic_df, R.drawable.ic_jt, R.drawable.ic_mf, R.drawable.ic_scjx, R.drawable.ic_scng, R.drawable.ic_thl, R.drawable.ic_x, R.drawable.ic_xc, R.drawable.ic_j}; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawRects(canvas);//画矩形 drawImages(canvas);//画图片 } /** * 画图片 * * @param canvas */ private void drawImages(Canvas canvas) { for (int x = 0; x 

效果展示

3.实现抽奖动画:

这里我们使用ValueAnimator使数字从0递增到我们的中奖位置比如3,然后改变递增所在的位置的矩形的背景以实现抽奖的效果,另外为了让用户感到逼真我们需要让抽奖色块多转几圈,同时我们需要将下一次的开始位置设为上一次的结束位置。

代码展示(为了方便只展示部分代码)

NineLuckPan:

 public class NineLuckPan extends View { private int mRepeatCount = 3;//转的圈数 private int mLuckNum = 3;//最终中奖位置 private int mPosition = -1;//抽奖

以上就是Android 实现九宫格抽奖功能的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动