新建GameView类使GameView继承自GridLayout,建立构造方法
public class GameView extends GridLayout {
public GameView(Context context,AttributeSet attrs, int defStyle) {
super(context,attrs, defStyle);
//TODO Auto-generated constructor stub
initGameView();//初始化类的方法,作为入口方法
}
publicGameView(Context context, AttributeSet attrs) {
super(context,attrs);
//TODO Auto-generated constructor stub
initGameView();//初始化类的方法
}
publicGameView(Context context) {
super(context);
//TODO Auto-generated constructor stub
initGameView();//初始化类的方法
}为了保证不出错,将所有带有参数的构造方法都写上,防止出错。在方法中调用initGameView();方法,用来初始化类。
并且,将这个自定义的布局放入到布局文件中。
<com.Lemon.game2048.GameView
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/gameView">
</com.Lemon.game2048.GameView>
接下来就是定义初始化类方法initGameView();
private void initGameView(){
setColumnCount(4);//设定GridLayout是4列的
setBackgroundColor(0xffbbada0);//设定背景颜色
//新建触摸事件
setOnTouchListener(newView.OnTouchListener() {
privatefloat startX,startY,offsetX,offsetY;//定义手指刚触碰和离开的坐标
@Override
publicboolean onTouch(View v, MotionEvent event) {
//TODO Auto-generated method stub
//监听手指的意图
switch(event.getAction()) {
caseMotionEvent.ACTION_DOWN://手指按下时
startX= event.getX();
startY= event.getY();
break;
caseMotionEvent.ACTION_UP://手指离开时
offsetX= event.getX()-startX;//得到的坐标要减去按下时的坐标
offsetY= event.getY()-startY;
//判断斜方向上的手势
//x的绝对值要是比y的绝对值大的话,说明是在水平方向上
if(Math.abs(offsetX)>Math.abs(offsetY)) {
//如果offset是负数说明是向左滑动,有误差,设置为-5
if(offsetX<-5) {
swipeLeft();//向左滑动的方法
}elseif(offsetX>5){
swipeRight();
}
}
else{
if(offsetY<-5) {
swipeUp();
}
elseif (offsetY>5) {
swipeDown();
}
}
break;
}
returntrue;//如果是false的话,无法触发onTouchDown等方法
}
});
}