Android编程随机抽奖,Android 滚动抽奖的实现
本文参考了网上的实现思路,使用了阿里的vlayout来实现,这里用vlayout只是单纯的熟悉一下vlayout的使用方法,毕竟vlayout还是可以解决很大部分UI需求。
首先看一下效果:
首先说一下思路:
1:数据,每一个奖项都是一个对象,需要设置id以及name
2:拿到数据集合,需要对id做一下处理,因为选中是圆形顺序转动,数据显示是集合顺序显示,这时候需要按照转动顺序获取到id集合
3:需要设置随机时长,根据结束时候的选中id,获取中奖信息。
首先用vlayout来实现列表:
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
VirtualLayoutManager layoutManager = new VirtualLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
//设置三列
GridLayoutHelper gridLayoutHelper = new GridLayoutHelper(3);
//设置数据长度,根据后台数据判断即可
gridLayoutHelper.setItemCount(9);
//管理LayoutHelper集合
final List helpers = new LinkedList<>();
//添加gridlayout布局
helpers.add(gridLayoutHelper);
//设置布局管理器
layoutManager.setLayoutHelpers(helpers);
//设置item间隔
recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.set(1, 1, 1, 1);
}
});
//设置适配器
recyclerView.setAdapter(new VirtualLayoutAdapter(layoutManager) {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MainViewHolder(new TextView(MainActivity.this));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
VirtualLayoutManager.LayoutParams layoutParams = new VirtualLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100);
holder.itemView.setLayoutParams(layoutParams);
((TextView) holder.itemView).setGravity(Gravity.CENTER);
if (position == 4) {
holder.itemView.setBackgroundColor(Color.WHITE);
((TextView) holder.itemView).setText("开始");
} else {
holder.itemView.setBackgroundResource(R.drawable.bg_item);
((TextView) holder.itemView).setText(Integer.toString(position));
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (position==4){
}else {
}
}
});
}
@Override
public int getItemCount() {
//这个主要计算布局item数量
List helpers = getLayoutHelpers();
if (helpers == null) {
return 0;
}
int count = 0;
for (int i = 0, size = helpers.size(); i < size; i++) {
//遍历每一个helper,拿到每一个helper的数据长度累加
count += helpers.get(i).getItemCount();
}
return count;
}
});
}
MainViewHolder
static class MainViewHolder extends RecyclerView.ViewHolder {
public MainViewHolder(View itemView) {
super(itemView);
}
}
这样就实现了3x3的gridlayout的列表布局,并设置样式。
然后需要开启一个线程,遍历id列表,去刷新背景,显示一个转动的效果
class MyRunnable implements Runnable{
@Override
public void run() {
handler.sendEmptyMessage(0);
if(startTime>=stopTime){
handler.removeCallbacks(myRunnable);
if(array_id[num]==5){
Toast.makeText(MainActivity.this,array_id[num]+"中奖了",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this,array_id[num]+"未中奖",Toast.LENGTH_SHORT).show();
}
startTime=0;
return;
}
handler.postDelayed(myRunnable,100);
startTime+=100;
}
}
这里设置id为5为中奖,中奖也必须根据id来判断。每100毫秒发送刷新一次,如果起始时间大于等于结束时间(随机时间),则停止线程,拿到当前id去判断是否中奖。
接收消息并处理:
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Change(array_id[num]);
num++;
if (num >=8) {
num = 0;
}
}
};
private void Change(int num) {
for (int i=0;i
if(i==num){
recyclerView.getChildAt(i).setSelected(true);
}else if(i==4){
continue;
}else {
recyclerView.getChildAt(i).setSelected(false);
}
}
}
在ViewHolder中设置开启线程以及UI
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
VirtualLayoutManager.LayoutParams layoutParams = new VirtualLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100);
holder.itemView.setLayoutParams(layoutParams);
((TextView) holder.itemView).setGravity(Gravity.CENTER);
if (position == 4) {
holder.itemView.setBackgroundColor(Color.WHITE);
((TextView) holder.itemView).setText("开始");
} else {
holder.itemView.setBackgroundResource(R.drawable.bg_item);
((TextView) holder.itemView).setText(Integer.toString(position));
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (position==4){
myRunnable.run();
}else {
Toast.makeText(MainActivity.this,"选中了"+position,Toast.LENGTH_SHORT).show();
}
}
});
}
Android编程随机抽奖,Android 滚动抽奖的实现相关推荐
- android 编程词典,基于Android的英文词典的实现方法
英文词典是手机中经常使用的应用.因此,在本文将结合Android来讨论如何实现一个Android版的英文词典.实现英文词典的方法很多.在本文使用了SQLite数据库来保存英文单词信息.系统通过SQLi ...
- android编程xml动画,Android中xml设置Animation动画效果详解
在Android中,Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation渐变动画,另一种是frame by frame animation画面转换动画. ...
- android编程实现加法器,Android实现加法计算器
本文实例为大家分享了Android实现加法计算器的具体代码,供大家参考,具体内容如下 布局 android:layout_width="match_parent" android: ...
- android编程怎么发送,Android 发送短信程序
搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. mButton1.setOnClickListener(new Button.O ...
- android p随机mac,android设备唯一码的获取,cpu号,mac地址
抄自http://blog.csdn.net/hpccn/article/details/7872141 开发Android应用中,我们常常需要设备的唯一码来确定客户端. Android 中的几中方法 ...
- android 编程 输入矩阵,Android中Matrix的pre post set方法理解
虽说以前学习过线性代数和图形学原理,但是在实际中碰到matrix还是疑惑了好一阵子,今天通过向同事请教终于找到一点门路,特总结如下: Matrix主要用于对平面进行缩放,平移,旋转以及倾斜操作,为简化 ...
- android编程设备信息,Android获取当前手机设备信息工具类详解
工作中用到的图片处理工具类,简单写下来,以便备用! public class BitmapUtils { /** * 图像背景圆角处理 * bitmap要处理的图片 roundPx 图片弯角的圆度一般 ...
- 【转】Android编程点滴(14) -- Android中资源文件夹res/raw和assets的使用
*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1.res/raw中的文件会被映射到 ...
- 从零开始学android编程_android初学者的入门秘籍
大概是去年年底开始接触android 原本是学习嵌入式的我,领导让我看看能不能搞一下这个android APP. 一开始的我懵逼得很... 这android APP 不是得用java写吗??? 现在我 ...
最新文章
- verilog基础篇RAM IP核的使用
- php url 筛选,PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
- CF1070L Odd Federalization 高斯消元
- 11月碎碎念-谈职场礼貌
- 一道关于比赛胜负的Sql查询题目
- Qt文档阅读笔记-QThreadPool的解释及使用
- 《算法:C语言实现》——连通性
- windows 下安装 mysql
- stm32串口c语言程序,STM32串口通信-代码实现
- 网络知识:光猫光纤宽带故障排查笔记!
- 火星坐标系(GCJ-02坐标系),CGCS2000坐标系,WGS-84坐标系
- Apple’s Secret? It Tells Us What We Should Love
- java工作日志,如何写工作日志
- 软件企业配置管理过程
- 揭秘 | 互联网6大主流盈利模式(内附美团外卖、摩拜案例)
- 天下大事,必做于细!
- 字体转换 (代码整理 备忘)
- #程序员的办公桌面是怎么样的?网友晒的真是逼格满满啊
- 西门子1200PLC的MODBUS通信
- 在安装matlab时,报:找不到必需的文件。(要使用文件安装密钥,您必须从包含安装文件的目录运行安装程序)
热门文章
- html5百度地图展示运动轨迹,百度地图根据经纬度获取运动轨迹
- WPS做论文的时候为什么文字后面不能添加下划线?
- 序列划分c语言,看懂了这些,你对缠论中的线段划分就基本掌握了!
- html加载背景图片
- 删除商品信息恢复的java_零基础学习java------35---------删除一个商品案例,删除多个商品,编辑(修改商品信息),校验用户名是否已经注册(ajax)...
- 简记_磁学基础(一)
- 线上平台/线下渠道,VR营销渠道大盘点
- 【亲测有效】微信图片已过期的恢复方法
- 爬取6874条数据,告诉你数据分析师的薪资待遇~!
- 机器人螺栓拆装_一种带电作业机器人专用螺栓拆装固定装置的制作方法