2016-12-04 79 views
0

我已經實現了一些手勢和觸摸控制方法,但由於某種原因,應用程序已安裝,但它似乎沒有工作。即文本不會從默認的文本更改。 我正在使用連接到我的電腦的實際設備(通過usb調試進行測試)。謝謝您的幫助。GestureDetectorCompat的實現

package com.example.kheriaa.gestures; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.view.MotionEvent; 
import android.view.GestureDetector; 
import android.support.v4.view.GestureDetectorCompat; 

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, 
GestureDetector.OnDoubleTapListener { 
    private TextView mainMessage; 
    private GestureDetectorCompat myGestureDetector; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mainMessage = (TextView) findViewById(R.id.MainMessage); 
     this.myGestureDetector = new GestureDetectorCompat(this,this); 
     myGestureDetector.setOnDoubleTapListener(this); 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) { 
     mainMessage.setText("onSingleTapConfirmed"); 
     return true; 
    } 

    @Override 
    public boolean onDoubleTap(MotionEvent e) { 
     mainMessage.setText("Double"); 
     return true; 
    } 

    @Override 
    public boolean onDoubleTapEvent(MotionEvent e) { 
     return true; 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     return true; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     return true; 
    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 

    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     return true; 
    } 
} 

回答

0

您錯過了將觸摸事件發送到您的GestureDetector。該功能添加到您的視圖:

@Override 
public boolean onTouchEvent(MotionEvent event){ 
    this.myGestureDetector.onTouchEvent(event); 
    // Be sure to call the superclass implementation 
    return super.onTouchEvent(event); 
} 

指的的documentation

GestureDetector.OnGestureListener notifies users when a particular touch event has occurred. To make it possible for your GestureDetector object to receive events, you override the View or Activity's onTouchEvent() method, and pass along all observed events to the detector instance.

現在,它應該工作正常。

編輯:添加此功能到您的View,而不是您的Activity直接!

+0

錯誤:(74,12)錯誤:類,接口或預期的枚舉。上述執行的每一行都會引發這個錯誤 – supersayan

+0

我編輯了我的答案。 – N0un

+0

6個月後:你是否仍然認爲我的答案是錯誤的答案? – N0un