android studio-如何在android游戏中实现刷卡手势

syqv5f0l  于 2021-06-26  发布在  Java
关注(0)|答案(0)|浏览(233)

我在android studio上开发一个游戏,用户触摸驱动瓷砖组合。为此,我使用了一个分为行和列的gridlayout。该值与imageview一起显示,所有gridlayout单元格都链接到一个单独的单元格类,该类包含imageview id。我在每个图像视图上实现了一个侦听器,以检测何时发生了滑动动作。初始化电路板和侦听器的代码如下:

for(int i = 0; i<noOfBlocks; i++) {
    for (int j = 0; j < noOfBlocks; j++) {
        ImageView imageView = new ImageView(this);
        imageView.setId(iDcnt);
        imageView.setLayoutParams(new ViewGroup.LayoutParams(widthOfBlock, widthOfBlock));
        imageView.setMaxHeight(widthOfBlock);
        imageView.setMaxWidth(widthOfBlock);
        int randomNum = (int) Math.floor(random.nextDouble() * gamepiece.length);
        imageView.setImageResource(gamepiece[randomNum]);
        Cell c = new Cell(i + 1, j+1, randomNum, imageView.getId());
        imageView.setOnTouchListener(new View.OnTouchListener() {
                                         @Override
                                         public boolean onTouch(View v, MotionEvent event) {
                                             SquarePlay s = null;
                                             try {
                                                 s = new SquarePlay();
                                             } catch (ClassNotFoundException e) {
                                                 e.printStackTrace();
                                             } catch (NoSuchMethodException e) {
                                                 e.printStackTrace();
                                             }
                                             s.onSwipeEvent(event);
                                             return false;
                                         }
                                     });
                gameBoard.addView(imageView);
        iDcnt++;
    }

ontouch事件在方法中的单独类中处理,如下所示:

float x1, x2, y1, y2, dx, dy;

public void onSwipeEvent(MotionEvent event){
switch(event.getAction()) {
    case(MotionEvent.ACTION_DOWN):
        x1 = event.getX();
        y1 = event.getY();
        break;

    case(MotionEvent.ACTION_UP): {
        x2 = event.getX();
        y2 = event.getY();
        dx = x2-x1;
        dy = y2-y1;

        if(Math.abs(dx) > Math.abs(dy)) {
            if(dx>0)
                onSwipeRight();
            else
                onSwipeLeft();
        } else {
            if(dy>0)
                onSwipeDown();
            else
                onSwipeUp();
        }
    }
}

}

private void onSwipeLeft() {
    System.exit(0);
}

private void onSwipeRight() {
    System.exit(0);
}

private void onSwipeUp() {
    System.exit(0);
}

private void onSwipeDown() {
    System.exit(0);
}

note:system.exit is 只是为了测试这是否有效。
应用程序加载,但不会产生刷卡事件的响应,是否有人对如何解决此问题有任何建议?
谢谢:)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题