Android 抽奖 GridView 只显示周围一圈的item 纯算法实现
不多说直接贴代码!!!!
package com.xuan.turntablelottery;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.xuan.turntablelottery.domain.TurntableInfo;
public class MainActivity extends Activity {
private GridView mGridView;
private TextView mTextView;
private List<TurntableInfo> data;
private Context mContext;
private TurnAdapter mAdapter;
/** 这是行数和列数 */
public static int ROW = 5;
/** 运行状态 */
private boolean runStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGridView = (GridView) findViewById(R.id.gv_gridview);
mTextView = (TextView) findViewById(R.id.tv_textview);
initView();
initData();
}
private void initView() {
mContext = this.getBaseContext();
/** 把屏幕的宽度作为gridview的高度和宽度 */
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
width, width);
mGridView.setLayoutParams(params);
mGridView.setPadding(5, 5, 5, 5);
mGridView.setNumColumns(ROW);
mGridView.setBackgroundColor(Color.BLUE);
Log.e("width ", "" + width);
}
private void initData() {
data = new ArrayList<TurntableInfo>();
runStatus = true;
TurntableInfo info = new TurntableInfo();
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
/** 判断是否显示 周围一圈显示,中间的隐藏 */
if ((i == 0 || i == 4) || (j == 0 || j == 4)) {
info = new TurntableInfo();
info.bool = true;
} else {
info = new TurntableInfo();
info.bool = false;
}
data.add(info);
}
}
Log.e("size ", "" + data.size());
initImg();
mAdapter = new TurnAdapter(mGridView, data);
mGridView.setAdapter(mAdapter);
}
private void initImg() {
data.get(0) .img = getResources().getDrawable(R.drawable.smartisan_m1l);
data.get(1) .img = getResources().getDrawable(R.drawable.leeco_pro3);
data.get(2) .img = getResources().getDrawable(R.drawable.meizu_e);
data.get(3) .img = getResources().getDrawable(R.drawable.mi_5);
data.get(4) .img = getResources().getDrawable(R.drawable.mi_mix);
data.get(9) .img = getResources().getDrawable(R.drawable.honor_8);
data.get(14).img = getResources().getDrawable(R.drawable.ic_null);
data.get(19).img = getResources().getDrawable(R.drawable.iphone6);
data.get(24).img = getResources().getDrawable(R.drawable.iphone7);
data.get(23).img = getResources().getDrawable(R.drawable.iwatch);
data.get(22).img = getResources().getDrawable(R.drawable.mac_book);
data.get(21).img = getResources().getDrawable(R.drawable.xiaomishouhuan);
data.get(20).img = getResources().getDrawable(R.drawable.ic_360n4s);
data.get(15).img = getResources().getDrawable(R.drawable.snmsung_on5);
data.get(10).img = getResources().getDrawable(R.drawable.ic_null);
data.get(5) .img = getResources().getDrawable(R.drawable.pico_neo_vr);
data.get(0).name="锤子 M1L";
data.get(1).name="乐视 PRO3";
data.get(2).name="魅族 E";
data.get(3).name="小米 MI5";
data.get(4).name="小米 MIX";
data.get(9).name="华为 荣耀8";
data.get(14).name="谢谢惠顾";
data.get(19).name="Iphone 6S";
data.get(24).name="Iphone 7";
data.get(23).name="iWatch 2";
data.get(22).name="Mac_Book";
data.get(21).name="小米 手环";
data.get(20).name="360 N4S";
data.get(15).name="三星 ON5";
data.get(10).name="谢谢惠顾";
data.get(5).name="VR 一体机";
}
/** 点击事件 */
public void start(View v) {
if (runStatus) {
runStatus = false;
new TurnAsync().execute();
}
}
/** 适配器 */
class TurnAdapter extends BaseAdapter {
private List<TurntableInfo> mData;
private GridView mGridView;
public TurnAdapter(GridView view, List<TurntableInfo> data) {
mGridView = view;
mData = data;
}
@Override
public int getCount() {
if (mData != null) {
return mData.size();
}
return 0;
}
@Override
public Object getItem(int position) {
if (mData != null) {
return mData.get(position);
}
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint("NewApi")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(mContext, R.layout.gridview_item, null);
holder.img = (ImageView) convertView.findViewById(R.id.iv_imageview);
int columnWidth = mGridView.getColumnWidth();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(columnWidth,columnWidth);
holder.img.setPadding(20, 20, 20, 20);
holder.img.setLayoutParams(params);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.img.setImageDrawable(getResources().getDrawable(
R.drawable.ic_app_img));
/** 判断是否显示 周围一圈显示,中间的隐藏 */
if (!mData.get(position).bool) {
holder.img.setVisibility(View.GONE);
}else{
holder.img.setImageDrawable(mData.get(position).img);
}
/** 判断是否 边框是否显示 */
if (mData.get(position).boolBG) {
convertView.setBackgroundColor(Color.RED);
}else{
convertView.setBackgroundColor(Color.TRANSPARENT);
}
return convertView;
}
private class ViewHolder {
public ImageView img;
}
}
/** 速度控制 */
class TurnAsync extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
/** 随机生成一个50-100 的数 */
Random ra = new Random();
int max = ra.nextInt(50) + 50;
Log.e("max ", max + "");
for (int i = 0; i < max; i++) {
int result = Calculation(i);
data.get(result).boolBG = true;
/** 运动的速度 由快到慢 */
int sleep = i + 50 / max * 1000;
SystemClock.sleep(sleep);
publishProgress("" + result);
}
runStatus = true;
return null;
}
@Override
protected void onProgressUpdate(String... values) {
mAdapter.notifyDataSetChanged();
// mGridView.setAdapter(new TurnAdapter(mGridView, data));
mTextView.setText(data.get(Integer.parseInt(values[0])).name);
}
/** 初始化选择 */
public void initChosen() {
for (int i = 0; i < data.size(); i++) {
data.get(i).boolBG = false;
}
}
/** 计算对应值应该选择到哪一个item */
public int Calculation(int index) {
initChosen();
int p = index % 15;
int i = p / (ROW - 1);
int j = p % (ROW - 1);
int k = 0;
switch (i) {
case 0:
k = j;
break;
case 1:
k = (i * 4) + (j * 5);
break;
case 2:
k = 25 - j - 1;
break;
case 3:
k = (4 - j) * 5;
break;
}
Log.e("", " k " + k);
return k;
}
}
}
Android 抽奖 GridView 只显示周围一圈的item 纯算法实现相关推荐
- android gridview 不显示,android解决gridview只显示一半
gridview在ScrollView中使用 android:layout_height="wrap_content" 发现并没有显示全部,而只是显示了一半.为了解决这个问题,打算 ...
- Android ScrollView嵌套GridView导致GridView只显示一行item
Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...
- 微信只显示分享朋友圈和好友 屏蔽其他的分享
wx.hideOptionMenu(); wx.showMenuItems({menuList: ['menuItem:share:appMessage','menuItem:share:timeli ...
- android显示图片部分区域,Android编程实现只显示图片一部分的方法
本文实例讲述了Android编程实现只显示图片一部分的方法.分享给大家供大家参考,具体如下: 在Android应用程序中加载一张图片,然后把它显示出来这是一件非常容易的事情,那怎么才能显示一张图片的一 ...
- android 修改DatePickerDialog只显示“年月”,去掉“日”显示
这两天在做一个项目,其中有个需求是让用户填写学业经历,那么只能选择年月,而不能出现日选择.通过在网上查资料,发现原理都是通过获取到Dialog布局中的年月日分别相对应的View,然后将其设置为GONE ...
- Android中DatePicker只显示年月的方法
最近项目中有一个选择信用卡有效期的功能,只需要选择年月,但是Android原生的DatePicker默认是可以选择年月日的,所以我们要做下特殊的处理, 并且Android5.0以上和以下的版本的处理方 ...
- Android 自定义DatePick 只显示年月,日期选择年月
实现的效果如下,给textView 添加点击事件,弹出自定义对话框 .... view.findViewById(R.id.age_title).setOnClickListener(new View ...
- Android的DatePickerDialog只显示年月
public class YearMonthDatePickerDialog extends DatePickerDialog {public YearMonthDatePickerDialog(Co ...
- Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法
在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...
最新文章
- Linux IO模型漫谈(6)- 信号驱动IO模型
- 使用python操作zookeeper
- paip. 内存占用少的php ide选择评测总结
- vbs运算符号和函数
- java中注释的嵌套,java – 使用mybatis注释获取嵌套对象
- Struts2回顾复习02
- OpenCV之图像腐蚀
- CCNA培训课总结笔记--静态路由实现负载均衡(四)
- 穿越计算机的迷雾总结
- 不擅长演讲?值得技术收藏的PPT演讲底层逻辑--大树模型
- 【小峰の题单】网络流经典题目
- slick.js基于jQuery全屏轮播插件
- 数据结构 Hash,哈希冲突,哈希聚集,BloomFilter,分布式一致性hash
- linux shell 关机,linux shell关机命令详解
- 读取超大json文件中数据格式的方法
- UserWarning: X does not have valid feature names, but MLPRegressor was fitted with feature names w
- 基于Windows 系统VS C++环境下配置UR-RTDE库
- Numeric Keypad
- 0 Day:操作系统的一些问题
- Matlab删除NAN所在行或列
热门文章
- 营销狂人杜国楹的两大顶级思维
- Heat Transfer|L2_Introduction on Heat Conduction
- vue自定义动画 以及animation包在vue中的使用
- 云计算和大数据之间的区别与联系
- cannot find coclass for interface....解决方法
- 图像数据集保存为lmdb格式 python
- 用IntelliJ IDEA的GUI Designer写Swing程式
- 关于嵌入式高端ARM核心板设计风格优缺点分析(作者 gooogleman)
- GitHub——入门教程
- matlab 广义积分,matlab求积分(超详细,含int integral integral2/3 quad trapz