热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android自定义View实现抽奖转盘

这篇文章主要为大家详细介绍了Android自定义View实现抽奖转盘,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android自定义View实现抽奖转盘的具体代码,供大家参考,具体内容如下

public class LuckCircle extends SurfaceView implements SurfaceHolder.Callback,Runnable {
 
 private SurfaceHolder mHolder;
 
 private Canvas mCanvas;
 
 //用于绘制的线程
 
 private Thread mThread;
 
 //线程开关的控制
 
 private boolean isRunning;
 
 private String[] mStr = new String[]{"优惠券","十元话费","恭喜发财","恭喜发财","英雄皮肤","50M流量"};

 //物品的图片
 
 private int[] mImgs = new int[]{R.mipmap.ic_launcher,
 R.mipmap.ic_launcher,R.mipmap.ic_launcher,
 R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher};
 
 private int mItemCount = 6;
 
 //盘快的颜色
 
 private int[] mColor = new int[]{0xffffc300,0xFFD9B114,0xFFDC0B2E,0xFF5510A4,0xFF447C42,0xFFEC3636};

 //与图片对应的bitmap数组
 
 private Bitmap[] mImgBitmap;

 //整个盘块的范围
 
 private RectF mRange = new RectF();
 
 //整个盘块的直径

 private int mRadius;
 
 
 //绘制盘块的画笔
 
 private Paint mArcPaint;
 
 
 //绘制文本的画笔
 
 private Paint mTextPaint;
 
 //滚动速度
 
 private double mSpeed = 10;
 
 
 //绘制的角度

 private volatile int mStartAngle = 0;
 
 
 //判断是否点击了停止按钮
 
 private boolean isShouldEnd;
 
 
 //转盘的中心位置

 private int mCenter;
 
 //padding取四个padding中的最小值
 
 private int mPadding;
 
 //背景图
 
 //private Bitmap mBgBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
 
 private float mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,20,getResources().getDisplayMetrics());
 public LuckCircle(Context context) {
 this(context,null);
 }
 
 public LuckCircle(Context context, AttributeSet attrs) {
 super(context, attrs);
 mHolder = getHolder();
 mHolder.addCallback(this);
 // 可获得焦点
 setFocusable(true);
 setFocusableInTouchMode(true);
 // 设置常亮
 setKeepScreenOn(true);
 }
 
 
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 int width = Math.min(getMeasuredWidth(),getMeasuredHeight());
 
 mPadding = getPaddingLeft();
 
 mRadius = width - mPadding *2;
 
 mCenter = width / 2;
 setMeasuredDimension(width,width);
 }
 
 @Override
 public void surfaceCreated(SurfaceHolder holder) {
 // 初始化绘制盘块的画笔
 mArcPaint = new Paint();
 mArcPaint.setAntiAlias(true);
 mArcPaint.setDither(true);
 
 // 初始化绘制盘块的画笔
 mTextPaint = new Paint();
 mTextPaint.setColor(0XFF0B25CF);
 mTextPaint.setTextSize(mTextSize);
 
 // 初始化盘块绘制的范围
 mRange = new RectF(mPadding,mPadding,mPadding+mRadius,mPadding+mRadius);
 
 // 初始化图片
 mImgBitmap = new Bitmap[mItemCount];
 for (int i = 0; i 

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 如何在文本中运行Java程序
    本文介绍了在文本中运行Java程序的步骤,包括创建文本文档、修改后缀、打开DOS命令窗口、编译和运行程序。通过这些步骤,可以在文本中成功运行Java程序并输出结果。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文介绍了使用SSH免密登录的步骤,包括生成公私钥、传递公钥给被登录机、修改文件权限的操作。同时提醒用户注意私钥的传递方式,建议使用U盘等离线方式传递。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
author-avatar
佩刚坤斌冠如_567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有