Android游戏开发之旅11 View中手势识别 Android开发技术

   有关Android平台的游戏开发中我们需要涉及到控制,在开始的Android游戏开发之旅中我们提到了按键和轨迹球的控制方式,从今天开始Android123开始给出大家游戏中其他的一些控制方式,比如今天的手势操作和未来重力感应。

  很多网友发现Android中手势识别提供了两个类,由于Android 1.6以下的版本比如cupcake中无法使用android.view.GestureDetector,而android.gesture.Gesture是Android 1.6才开始支持的,我们考虑到仍然有很多Android 1.5固件的网友,就来看下兼容性更强的android.view.GestureDetector。在android.view.GestureDetector类中有很多种重载版本,下面我们仅提到能够自定义在View中的两种方法,分别为GestureDetector(Context context, GestureDetector.OnGestureListener listener) 和 GestureDetector(Context context, GestureDetector.OnGestureListener listener, Handler handler) 和。我们可以看到第一个参数为Context,所以我们想附着到某View时,最简单的方法就是直接从超类派生传递Context,实现GestureDetector里中提供一些接口。

  下面我们就以实现手势识别的onFling动作,在CwjView中我们从View类继承,当然大家可以从TextView等更高层的界面中实现触控。

class CwjView extends View {

    private GestureDetector mGD;
    public CwjView(Context context, AttributeSet attrs) {
        super(context, attrs);
     
        mGD = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                    int dx = (int) (e2.getX() – e1.getX()); //计算滑动的距离

                    if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { //降噪处理,必须有较大的动作才识别
                        if (velocityX > 0) {
                           //向右边

                        } else {
                            //向左边

                        }
                        return true;
                    } else {
                        return false;  //当然可以处理velocityY处理向上和向下的动作
                    }
                }
            });
    }

  在上面Android123提示大家仅仅探测了Fling动作仅仅实现了onFling方法,这里相关的还有以下几种方法来实现具体的可以参考我们以前的文章有详细的解释:

 boolean  onDoubleTap(MotionEvent e)
 boolean  onDoubleTapEvent(MotionEvent e) 
 boolean  onDown(MotionEvent e) 
 void  onLongPress(MotionEvent e) 
 boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
 void  onShowPress(MotionEvent e) 
 boolean  onSingleTapConfirmed(MotionEvent e) 
 boolean  onSingleTapUp(MotionEvent e) 
 

   接下来是重点,让我们的View接受触控,需要使用下面两个方法让GestureDetector类去处理onTouchEvent和onInterceptTouchEvent方法。

    @Override
    public boolean onTouchEvent(MotionEvent event) { 
        mGD.onTouchEvent(event);
        return true;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return mGD.onTouchEvent(event);
    }

}

  有关重力感应的方向识别, 我们将告诉大家如何通过重力感应来控制我们的Android游戏,目前对于大多数Android设备来说仅提供了重力感应器和加速感应器,只有较新或高端的Android设备还提供了陀螺仪,可以帮助我们测试角速度,来处理一些复杂的应用。详细的可以参考我们的 Android游戏开发之旅12 重力感应篇

本人擅长Ai、Fw、Fl、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、JavaScript、PHP、ASP、C、C++、C#、Java、Ruby、Perl、Lisp、Python、Objective-C、ActionScript、Pascal等单词的拼写,熟悉Windows、Linux、OS X、Android、iOS、WP8等系统的开关机。

通过下面的方式来联系我们:

电邮:138762189@qq.com

联系QQ:点击这里给我发消息

官方站:www.tadke.com

※ ※ 联系请加我的企鹅号 ※※

※ ※技术支持请微信联系站长 ※※

Copyright © 2023 Tadke.com. 琼ICP备20000547号