不多说直接贴代码!!!!

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 纯算法实现相关推荐

  1. android gridview 不显示,android解决gridview只显示一半

    gridview在ScrollView中使用 android:layout_height="wrap_content" 发现并没有显示全部,而只是显示了一半.为了解决这个问题,打算 ...

  2. Android ScrollView嵌套GridView导致GridView只显示一行item

    Android ScrollView嵌套GridView导致GridView只显示一行item Android ScrollView在嵌套GridView时候,会导致一个问题发生:GridView只显 ...

  3. 微信只显示分享朋友圈和好友  屏蔽其他的分享

    wx.hideOptionMenu(); wx.showMenuItems({menuList: ['menuItem:share:appMessage','menuItem:share:timeli ...

  4. android显示图片部分区域,Android编程实现只显示图片一部分的方法

    本文实例讲述了Android编程实现只显示图片一部分的方法.分享给大家供大家参考,具体如下: 在Android应用程序中加载一张图片,然后把它显示出来这是一件非常容易的事情,那怎么才能显示一张图片的一 ...

  5. android 修改DatePickerDialog只显示“年月”,去掉“日”显示

    这两天在做一个项目,其中有个需求是让用户填写学业经历,那么只能选择年月,而不能出现日选择.通过在网上查资料,发现原理都是通过获取到Dialog布局中的年月日分别相对应的View,然后将其设置为GONE ...

  6. Android中DatePicker只显示年月的方法

    最近项目中有一个选择信用卡有效期的功能,只需要选择年月,但是Android原生的DatePicker默认是可以选择年月日的,所以我们要做下特殊的处理, 并且Android5.0以上和以下的版本的处理方 ...

  7. Android 自定义DatePick 只显示年月,日期选择年月

    实现的效果如下,给textView 添加点击事件,弹出自定义对话框 .... view.findViewById(R.id.age_title).setOnClickListener(new View ...

  8. Android的DatePickerDialog只显示年月

    public class YearMonthDatePickerDialog extends DatePickerDialog {public YearMonthDatePickerDialog(Co ...

  9. Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法

    在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...

最新文章

  1. Linux IO模型漫谈(6)- 信号驱动IO模型
  2. 使用python操作zookeeper
  3. paip. 内存占用少的php ide选择评测总结
  4. vbs运算符号和函数
  5. java中注释的嵌套,java – 使用mybatis注释获取嵌套对象
  6. Struts2回顾复习02
  7. OpenCV之图像腐蚀
  8. CCNA培训课总结笔记--静态路由实现负载均衡(四)
  9. 穿越计算机的迷雾总结
  10. 不擅长演讲?值得技术收藏的PPT演讲底层逻辑--大树模型
  11. 【小峰の题单】网络流经典题目
  12. slick.js基于jQuery全屏轮播插件
  13. 数据结构 Hash,哈希冲突,哈希聚集,BloomFilter,分布式一致性hash
  14. linux shell 关机,linux shell关机命令详解
  15. 读取超大json文件中数据格式的方法
  16. UserWarning: X does not have valid feature names, but MLPRegressor was fitted with feature names w
  17. 基于Windows 系统VS C++环境下配置UR-RTDE库
  18. Numeric Keypad
  19. 0 Day:操作系统的一些问题
  20. Matlab删除NAN所在行或列

热门文章

  1. 营销狂人杜国楹的两大顶级思维
  2. Heat Transfer|L2_Introduction on Heat Conduction
  3. vue自定义动画 以及animation包在vue中的使用
  4. 云计算和大数据之间的区别与联系
  5. cannot find coclass for interface....解决方法
  6. 图像数据集保存为lmdb格式 python
  7. 用IntelliJ IDEA的GUI Designer写Swing程式
  8. 关于嵌入式高端ARM核心板设计风格优缺点分析(作者 gooogleman)
  9. GitHub——入门教程
  10. matlab 广义积分,matlab求积分(超详细,含int integral integral2/3 quad trapz