您的位置:首页 > 移动开发 > Android开发

Android 抽奖 GridView 只显示周围一圈的item 纯算法实现

2016-10-25 19:27 309 查看
不多说直接贴代码!!!!

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
be41
="谢谢惠顾";
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
相关文章推荐