<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    Android游戲開發之旅(十一)View中手勢識別

    Posted on 2010-12-03 10:25 啥都寫點 閱讀(690) 評論(0)  編輯  收藏 所屬分類: 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 等更高層的界面 中實現觸控。

    view plaincopy to clipboardprint?
    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處理向上和向下的動作  
                        }  
                    }  
                });  
        } 
    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方法,這里相關的還有以下幾種方法來實現具體的可以參考我們以前的文章有詳細的解釋:

    view plaincopy to clipboardprint?
       
    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)  
     
    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方法。

    view plaincopy to clipboardprint?
    @Override 
    public boolean onTouchEvent(MotionEvent event) {   
        mGD.onTouchEvent(event);  
        return true;  
    }  
    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) {  
        return mGD.onTouchEvent(event);  
    }  

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/JavaTiger427/archive/2010/11/25/6034582.aspx



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 国产乱子精品免费视观看片| 可以免费观看的一级毛片| 亚洲卡一卡二卡乱码新区| 浮力影院第一页小视频国产在线观看免费 | 成年大片免费视频| 无码的免费不卡毛片视频 | 亚洲黄色在线观看视频| 最近免费中文字幕视频高清在线看| 无忧传媒视频免费观看入口| 亚洲AV人无码激艳猛片| 国产一精品一aⅴ一免费| 免费看搞黄视频网站| 亚洲av色香蕉一区二区三区蜜桃| 亚洲人成中文字幕在线观看| 免费可以看黄的视频s色| 国产成人精品免费大全| 亚洲伊人久久大香线蕉结合| 亚洲一区二区三区自拍公司| 青青草国产免费久久久下载 | 成年女人免费碰碰视频| 午夜视频免费在线观看| 四虎成年永久免费网站 | 一本到卡二卡三卡免费高| 国产国拍精品亚洲AV片| 成人免费午夜在线观看| 精品视频在线免费观看| 色吊丝性永久免费看码| 亚洲成人激情小说| 亚洲精品电影在线| 亚洲色精品vr一区二区三区| 四虎永久免费地址在线观看| 午夜国产精品免费观看 | 美女免费视频一区二区三区| 国产亚洲av片在线观看18女人| 999国内精品永久免费观看| 麻豆精品成人免费国产片| 一级做α爱过程免费视频| 亚洲另类无码专区首页| 亚洲国产中文在线二区三区免| 亚洲国产高清视频| 精品亚洲永久免费精品|