Android 抽奖 GridView 只显示周围一圈的item 纯算法实现
来源:互联网 发布:js购物车结算代码 编辑:程序博客网 时间:2024/05/01 06:03
不多说直接贴代码!!!!
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 ScrollView嵌套GridView导致GridView只显示一行item
- Android关于GridView只显示一行item解决办法
- Android菜鸟练习第二十四课 Android ScrollView嵌套GridView导致GridView只显示一行item
- Android进阶——GridView实现可长按item显示可删除的小图标的UI
- 抽奖算法的实现
- 算法:平面上一些点,如何找某一点周围一圈最近的点?
- 解决ScrollView嵌套ListView和GridView冲突只显示一行Item的高度的方法
- Android中GridView中Item点击背景图片的显示改变
- ListView或GridView嵌入ScrollView中时,只显示一个Item并且默认将此Item置顶的问题解决办法
- Android 嵌套GridView,ListView只显示一行的解决办法
- 实现可拖拽item的GridView
- item可拖拽的GridView实现
- android gridview设置item居中显示
- Android GridView之实现单元格合并,以及第一个item点击无响应或显示不正常的解决方案
- android GridView单个item动画的实现以及样例
- Android 可拖拽的GridView效果实现, 长按可拖拽item
- android实现ListView或GridView中item的倒数功能
- C#命名方式转换代码
- 数据立方体的基本计算
- vijos1106侦探推理&&Noip提高组2003
- 2013_changsha_onsite
- Android RecyclerView使用完全解析-体验艺术般的控件
- Android 抽奖 GridView 只显示周围一圈的item 纯算法实现
- 关于滚动条的几个参数
- C/C++字符串,字符数组,字符指针及其相互静态拷贝与追加的安全问题解决方案(2)
- 数据结构之栈(C语言实现)
- hdu 2141 Can you find it?(二分)
- Apple公司Darwin流式服务器源代码分析(一)
- DM8168 DVRRDK软件框架研究
- Maven手动添加本地jar包
- HDU 2094 产生冠军(map)