android自定义抽奖转盘

本文介绍如何根据项目需求自定义一个可任意添加奖品的Android抽奖转盘视图。通过实现一个自定义View,结合下层动态添加的item和上层旋转图片的动画效果,实现点击触发转动并停在指定奖项的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中有用到抽奖转盘,网上找的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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值