这次我们的任务是实现游戏面板上的一个个小方块,我们的主面板是一个GridLayout,我们把小方块一个个加到GridLayout中,就形成了我们现在的这个游戏面板。
小方块还是比较简单的,关键是,如何做才能最有效率呢?这是我们一直考虑的,也算是职业强迫症吧,我们的小方块上其实就是显示一个数字,所以,我们可以用一个TextView或者ImageView,这个随意了,看以后的打算,是否需要自定义图片呀等等,我们暂时就用一个TextView吧,简单。
父布局选择什么呢?其实因为我们就一个子View,所以什么布局都一样的啦,但是,还是为了效率考虑,首选FrameLayout,这个是几大布局中最简单,效率最高的了。
ok,我们还要为这个小方块实现一些方法:
1、设置显示的数字
2、根据数字设置背景颜色
3、一系列的get、set方法,这个可以在后面程序设计的时候再做
package com.xys.game2048.bean;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
public class GameItem extends FrameLayout {
// Item显示数字
private int cardShowNum;
// Item显示颜色
private int colorShow;
// 数字Title
private TextView tvNum;
// 数字Title LayoutParams
private LayoutParams params;
public GameItem(Context context, int cardShowNum) {
super(context);
this.cardShowNum = cardShowNum;
// 初始化Item
initCardItem();
}
/**
* 初始化Item
*
* @param context
* @param cardShowNum
*/
private void initCardItem() {
// 设置背景色
setBackgroundColor(Color.GRAY);
tvNum = new TextView(getContext());
setNum(cardShowNum);
tvNum.setTextSize(30);
tvNum.setGravity(Gravity.CENTER);
params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
params.setMargins(5, 5, 5, 5);
addView(tvNum, params);
}
public View getItemView() {
return tvNum;
}
public int getNum() {
return cardShowNum;
}
public void setNum(int num) {
this.cardShowNum = num;
if (num == 0) {
tvNum.setText("");
} else {
tvNum.setText("" + num);
}
// 设置背景颜色
switch (num) {
case 0:
tvNum.setBackgroundColor(0x00000000);
break;
case 2:
tvNum.setBackgroundColor(0xffeee4da);
break;
case 4:
tvNum.setBackgroundColor(0xffede0c8);
break;
case 8:
tvNum.setBackgroundColor(0xfff2b179);
break;
case 16:
tvNum.setBackgroundColor(0xfff59563);
break;
case 32:
tvNum.setBackgroundColor(0xfff67c5f);
break;
case 64:
tvNum.setBackgroundColor(0xfff65e3b);
break;
case 128:
tvNum.setBackgroundColor(0xffedcf72);
break;
case 256:
tvNum.setBackgroundColor(0xffedcc61);
break;
case 512:
tvNum.setBackgroundColor(0xffedc850);
break;
case 1024:
tvNum.setBackgroundColor(0xffedc53f);
break;
case 2048:
tvNum.setBackgroundColor(0xffedc22e);
break;
default:
tvNum.setBackgroundColor(0xff3c3a32);
break;
}
}
}
以上,背景设置颜色还是自定义图片,大家都可以自己修改啦
PS 需要源码的请留意,完善后会发给大家