舒尔特方格 ,生成随机数,从小到大依次点击,时间越短越好。
底部带源码和apk下载
注意功能点:
一、使用TableLayout自动生成表格
这一部分是参考网上的帖子,找不到原连接了;
自定义TableLayout, 以下是源码:
public class TableBorderLayout extends TableLayout {
private Context mContext;
private BaseAdapter mAdapter;
private int column = 0; //每行的个数
public TableBorderLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
setStretchAllColumns(true);
}
public void setAdapter(BaseAdapter baseAdapter, int column) {
if (baseAdapter == null || baseAdapter.getCount() == 0) {
return;
}
this.mAdapter = baseAdapter;
this.column = column;//个数
drawLayout();
}
private void drawLayout() {
removeAllViews();
int realcount = mAdapter.getCount();//数据的总数,list.size(); 例如:size = 18
int count = 0;
if (realcount < column) {//如果集合里的数据 小于 行个数 例如:18 > 5
count = column;
} else if (realcount % column != 0) { // 18 % 5 = 3 3 != 0
count = realcount + column - (realcount % column); // 18 + 5 - 3 = 20 count=20
} else {
count = realcount;
}
TableRow tableRow = null; //每一行的tableRow
for (int i = 0; i < count; i++) { //i < 20, 会循环20次,添加20个格子,但数据总数只有18,所以最后两个是空的
final int index = i;
View view = null;
if (index >= realcount) {
view = mAdapter.getView((realcount - 1), null, null);
view.setVisibility(INVISIBLE);//没有数据不显示
} else {
view = mAdapter.getView(index, null, null);
}
if (index % column == 0) { //整行,每次取余为0 就会新增一行实现自增长,最大数为20,个数为5,会增四行
tableRow = new TableRow(mContext);
}
if (tableRow != null) {//添加view
tableRow.addView(view);
}
if (index % column == 0) {
addView(tableRow, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
}
}
}
adapter源码:
public class MyAdapter extends BaseAdapter {
private List<Integer> dataList;
private LayoutInflater mInflater;
private int type;
private View.OnClickListener clickListener;
private Context context;
private List<Integer> isR = new ArrayList<>(); //随机色彩R
private List<Integer> isG = new ArrayList<>(); //随机色彩G
private List<Integer> isB = new ArrayList<>(); //随机色彩B
public MyAdapter(Context context, List<Integer> dataList, View.OnClickListener clickListener, int type) {
this.mInflater = LayoutInflater.from(context);
this.dataList = dataList;//总数据
this.clickListener = clickListener;
this.type = type; //用来判断是 行个数是否为7、9
this.context = context;
}
public MyAdapter(Context context, List<Integer> dataList, View.OnClickListener clickListener, int type, List<Integer> isR, List<Integer> isG, List<Integer> isB) {
this.mInflater = LayoutInflater.from(context);
this.dataList = dataList;
this.clickListener = clickListener;
this.type = type;
this.context = context;
this.isR = isR;
this.isG = isG;
this.isB = isB;
}
@Override
public int getCount() {
return dataList.size();
}
@Override
public Object getItem(int i) {
return dataList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = mInflater.inflate(R.layout.item_click_interface_list, null);
}
TextView textView = view.findViewById(R.id.tvTile);
if (type == 7) {
textView.setTextSize(20);//缩小字体
} else if (type == 9) {
textView.setTextSize(16);
}
if (isR.size() > 0 && isG.size() > 0 && isB.size() > 0){//生成随机色
textView.setBackgroundColor(Color.rgb(isR.get(i+1), isG.get(i+2), isB.get(i+3)));
}
textView.setText("" + dataList.get(i).toString());
textView.setId(dataList.get(i).intValue());//设置ID
textView.setOnClickListener(clickListener);
return view;
}
}
二、打乱数字
打乱数字比较简单,使用Collections.shuffle()方法,已下是关键代码:
//打乱数字
Collections.shuffle(numberList);
shuffle(List<?>) 方法用于随机排列随机使用一个默认的源指定的列表
这个方法很实用,在随机色彩也使用了该方法。
...............................以上就是应用比较关键的代码.............................
三、应用截图
共有三种模式,普通模式{3x3, 5x5, 7x7, 9x9},素数模式{5x5},奇数模式{3x3, 5x5, 7x7}。
特殊的色彩方格模式:开启后方格底色将会带有颜色,以此来增加难度。
![](https://img-blog.csdn.net/20180114155029486?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWViaW45NTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180114155151154?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWViaW45NTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180114155206896?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWViaW45NTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180114155223875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWViaW45NTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180114155233008?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWViaW45NTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20180114155241818?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWViaW45NTI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
四、源码和APK下载
源码:
github: https://github.com/Mei-Bin/MyShulteProject
百度云:链接:https://pan.baidu.com/s/1pMZqNov 密码:oqqn
APK:
百度云:链接:https://pan.baidu.com/s/1dFPl8FB 密码:oejm
五、最后的话:
舒尔特这个游戏也挺有意思的,主要锻炼注意力................