【问题标题】:SimpleOnGestureListener not workingSimpleOnGestureListener 不工作
【发布时间】:2017-10-25 06:55:19
【问题描述】:

我想通过在我的 MainActivity 中滑动来切换活动。我从 GestureDetectorCompat 声明了一个对象,并在 onCreate 方法中对其进行了初始化,如下所示:

gestureObject = new GestureDetectorCompat(MainActivity.this, new GestureListener());

另外,我像这样覆盖 onTouchEvent

@Override
public boolean onTouchEvent(MotionEvent event) {
    this.gestureObject.onTouchEvent(event);
    return super.onTouchEvent(event);
}

我的 MainActivityAppCompatActivity 扩展并实现 NavigationView.OnNavigationItemSelectedListener、OnMenuItemClickListener

GestureListener 代码为:

private class GestureListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public void onLongPress(MotionEvent e) {
        Log.e(TAG, "long pressed");
        super.onLongPress(e);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        Log.e(TAG, "on Flig");

        if (e2.getX() > e1.getX()) {

            Log.e(TAG, "left to right");
        }
        return true;
    }
}

但它不起作用。

是否与navigationView有关?

我能做什么?

【问题讨论】:

  • 你可能想看看ViewPager
  • 我有活动,不是片段。
  • 它是如何不起作用的:崩溃、错误消息、冻结、意外行为或成群的蝗虫?
  • 什么都不做。

标签: java android android-gesture


【解决方案1】:

试试这个代码..

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;

public class MainActivity extends AppCompatActivity {

private GestureDetectorCompat mDetector;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mDetector = new GestureDetectorCompat(MainActivity.this, new SwipeGestureDetector());
}

@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
    this.mDetector.onTouchEvent(motionEvent);
    return super.onTouchEvent(motionEvent);
}

@Override
public boolean dispatchTouchEvent(@NonNull MotionEvent ev) {
    super.dispatchTouchEvent(ev);
    return mDetector.onTouchEvent(ev);
}

/**
 * Swipe Gesture Detector Class for swipe detector.
 */
public class SwipeGestureDetector extends GestureDetector.SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if(e1 == null || e2 == null)
            return false;
        if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1)
            return false;
        else {
            try {
                float diffX = e2.getX() - e1.getX();
                float diffY = e2.getY() - e1.getY();
                if(Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > 100 && Math.abs(velocityX) > 1000) {
                        if ((diffX > 0) || (diffX < 0)) {
//                                      nextActivity();

                                return true;
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();

            }
            return false;
        }
    }
}

}

【讨论】:

  • 向我发送包含所有监听器的完整代码(NavigationView.OnNavigationItemSelectedListener、OnMenuItemClickListener。)所以,我可以找出代码中的问题所在。
【解决方案2】:

试试这个,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2012-01-31
    • 2015-03-03
    相关资源
    最近更新 更多