本文参考了网上的实现思路,使用了阿里的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 滚动抽奖的实现相关推荐

  1. android 编程词典,基于Android的英文词典的实现方法

    英文词典是手机中经常使用的应用.因此,在本文将结合Android来讨论如何实现一个Android版的英文词典.实现英文词典的方法很多.在本文使用了SQLite数据库来保存英文单词信息.系统通过SQLi ...

  2. android编程xml动画,Android中xml设置Animation动画效果详解

    在Android中,Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation渐变动画,另一种是frame by frame animation画面转换动画. ...

  3. android编程实现加法器,Android实现加法计算器

    本文实例为大家分享了Android实现加法计算器的具体代码,供大家参考,具体内容如下 布局 android:layout_width="match_parent" android: ...

  4. android编程怎么发送,Android 发送短信程序

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. mButton1.setOnClickListener(new Button.O ...

  5. android p随机mac,android设备唯一码的获取,cpu号,mac地址

    抄自http://blog.csdn.net/hpccn/article/details/7872141 开发Android应用中,我们常常需要设备的唯一码来确定客户端. Android 中的几中方法 ...

  6. android 编程 输入矩阵,Android中Matrix的pre post set方法理解

    虽说以前学习过线性代数和图形学原理,但是在实际中碰到matrix还是疑惑了好一阵子,今天通过向同事请教终于找到一点门路,特总结如下: Matrix主要用于对平面进行缩放,平移,旋转以及倾斜操作,为简化 ...

  7. android编程设备信息,Android获取当前手机设备信息工具类详解

    工作中用到的图片处理工具类,简单写下来,以便备用! public class BitmapUtils { /** * 图像背景圆角处理 * bitmap要处理的图片 roundPx 图片弯角的圆度一般 ...

  8. 【转】Android编程点滴(14) -- Android中资源文件夹res/raw和assets的使用

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1.res/raw中的文件会被映射到 ...

  9. 从零开始学android编程_android初学者的入门秘籍

    大概是去年年底开始接触android 原本是学习嵌入式的我,领导让我看看能不能搞一下这个android APP. 一开始的我懵逼得很... 这android APP 不是得用java写吗??? 现在我 ...

最新文章

  1. verilog基础篇RAM IP核的使用
  2. php url 筛选,PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
  3. CF1070L Odd Federalization 高斯消元
  4. 11月碎碎念-谈职场礼貌
  5. 一道关于比赛胜负的Sql查询题目
  6. Qt文档阅读笔记-QThreadPool的解释及使用
  7. 《算法:C语言实现》——连通性
  8. windows 下安装 mysql
  9. stm32串口c语言程序,STM32串口通信-代码实现
  10. 网络知识:光猫光纤宽带故障排查笔记!
  11. 火星坐标系(GCJ-02坐标系),CGCS2000坐标系,WGS-84坐标系
  12. Apple’s Secret? It Tells Us What We Should Love
  13. java工作日志,如何写工作日志
  14. 软件企业配置管理过程
  15. 揭秘 | 互联网6大主流盈利模式(内附美团外卖、摩拜案例)
  16. 天下大事,必做于细!
  17. 字体转换 (代码整理 备忘)
  18. #程序员的办公桌面是怎么样的?网友晒的真是逼格满满啊
  19. 西门子1200PLC的MODBUS通信
  20. 在安装matlab时,报:找不到必需的文件。(要使用文件安装密钥,您必须从包含安装文件的目录运行安装程序)

热门文章

  1. html5百度地图展示运动轨迹,百度地图根据经纬度获取运动轨迹
  2. WPS做论文的时候为什么文字后面不能添加下划线?
  3. 序列划分c语言,看懂了这些,你对缠论中的线段划分就基本掌握了!
  4. html加载背景图片
  5. 删除商品信息恢复的java_零基础学习java------35---------删除一个商品案例,删除多个商品,编辑(修改商品信息),校验用户名是否已经注册(ajax)...
  6. 简记_磁学基础(一)
  7. 线上平台/线下渠道,VR营销渠道大盘点
  8. 【亲测有效】微信图片已过期的恢复方法
  9. 爬取6874条数据,告诉你数据分析师的薪资待遇~!
  10. 机器人螺栓拆装_一种带电作业机器人专用螺栓拆装固定装置的制作方法