Ogu*_*han 9 android gesture-recognition gesture
正如我在标题上提到的,app也有一个ScrollView和一个GestureDetector.在ScrollView的触摸事件之外,GestureDetector处理从左到右和从右到左的滑动操作.他们都运作良好.
现在我想添加一个GestureLibrary-I表示raw-到Activity.我看了不同的来源,并以某种方式添加得当.简单地说,布局看起来像这样:
<android.gesture.GestureOverlayView
android:id="@+id/gOverlay"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ScrollView
android:id="@+id/content_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none">
</ScrollView>
<!-- Other views -->
</android.gesture.GestureOverlayView>
Run Code Online (Sandbox Code Playgroud)
这是我想要的画(黄线),但它没有触发任何方法.这是我实施的方式OnGesturePerformedListener:
/*
* Gestures
*/
gLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
if (!gLibrary.load()) { finish(); }
GestureOverlayView gestureOverlayView = (GestureOverlayView) findViewById(R.id.gOverlay);
gestureOverlayView.addOnGesturePerformedListener(gestureListener);
Run Code Online (Sandbox Code Playgroud)
这是gestureListener:
private OnGesturePerformedListener gestureListener = new OnGesturePerformedListener() {
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
ArrayList<Prediction> predictions = gLibrary.recognize(gesture);
if (predictions.size() > 1) {
for(Prediction prediction: predictions){
Log.d("Test", "Looking for gestures");
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
就这样.在墙上,我在不同的Activity中尝试了这个源代码,它没有ScrollView并且工作正常.
最后,我不确定它是关于GestureDetector的,所以这就是app如何使用探测器:
public boolean dispatchTouchEvent(MotionEvent ev) {
if (detector != null) {
if (detector.onTouchEvent(ev)) {
return true;
}
}
return super.dispatchTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)
我的SwipeDetector:
private class SwipeDetector extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
public boolean onFling(android.view.MotionEvent e1, android.view.MotionEvent e2, float velocityX, float velocityY) {
if( Math.abs( e1.getY() - e2.getY() ) > SWIPE_MAX_OFF_PATH ) { return false; }
if( e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs( velocityX ) > SWIPE_THRESHOLD_VELOCITY ) { return false; }
if( e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs( velocityX ) > SWIPE_THRESHOLD_VELOCITY ) { filterButton.performClick();return true; }
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我的做法有什么问题?
android中的所有触摸事件都是从孩子到父母.因此,滚动视图处理所有触摸事件,并且您的手势检测器不会接收它们.您可以设置触摸侦听器ScrollView:
scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (detector != null) {
return detector.onTouchEvent(event);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
您必须检查滚动是否正常工作,并且您不会消耗滚动事件.
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |