<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



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 亚洲精品国产电影| 午夜私人影院免费体验区| 狠狠色伊人亚洲综合成人| sss在线观看免费高清| 亚洲国产精品专区在线观看| 产传媒61国产免费| 国产亚洲一区区二区在线| 国产无遮挡又黄又爽免费网站| 亚洲欧洲日产国码无码网站| 少妇性饥渴无码A区免费 | 亚洲精品乱码久久久久久| 在线免费观看h片| 亚洲AV成人无码久久精品老人 | 亚洲综合精品网站在线观看| 国产精品免费观看视频| 亚洲成在人线av| 永久在线免费观看| 亚洲精华液一二三产区| 国产又大又黑又粗免费视频| 国产精品无码免费专区午夜| 亚洲ⅴ国产v天堂a无码二区| 黄色成人免费网站| 日本视频免费观看| 亚洲人成网站影音先锋播放| 思思99re66在线精品免费观看| 美女羞羞视频免费网站| 亚洲AV永久青草无码精品| 日韩免费一区二区三区在线| 美女被免费视频网站a| 亚洲精品少妇30p| 天天天欲色欲色WWW免费| CAOPORM国产精品视频免费| 亚洲综合区图片小说区| 俄罗斯极品美女毛片免费播放| 黄网站色视频免费在线观看的a站最新 | 在线观看成人免费视频不卡| 亚洲成aⅴ人片久青草影院按摩| 国产亚洲视频在线播放| 国产免费AV片在线播放唯爱网| 猫咪www免费人成网站| 亚洲成人一级电影|