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;


}


}


}

1 0
原创粉丝点击