Android长按滚动

标签 android scroll long-press

我想将长按与滚动“连接”起来,这样用户就不必释放屏幕并开始滚动。

我已经实现了手势检测器...

final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
    public void onLongPress(MotionEvent e) {
        // action 1
    }

    public boolean onScroll(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
        // action 2
    }       
}

public boolean onTouchEvent(MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}    

但是现在在操作 1 和操作 2 之间,用户必须释放屏幕...我如何在不释放屏幕的情况下连接这些操作?

最佳答案

我不认为 GestureDetector 会做你想做的事,更有可能你必须自己做。我不知道您当前的设置,下面是一个将 OnToucListener 绑定(bind)到 ScrollView 的类,它将考虑这两个事件:

public class ScrollTouchTest extends Activity {

    private final int LONG_PRESS_TIMEOUT = ViewConfiguration
            .getLongPressTimeout();
    private Handler mHandler = new Handler();
    private boolean mIsLongPress = false;
    private Runnable longPress = new Runnable() {

        @Override
        public void run() {         
            if (mIsLongPress) {             
                actionOne();
                mIsLongPress = false;
            }
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.views_scrolltouchtest);
        findViewById(R.id.scrollView1).setOnTouchListener(
                new OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        final int action = event.getAction();
                        switch (action) {
                        case MotionEvent.ACTION_DOWN:
                            mIsLongPress = true;                            
                            mHandler.postDelayed(longPress, LONG_PRESS_TIMEOUT);
                            break;
                        case MotionEvent.ACTION_MOVE:
                            actionTwo(event.getX(), event.getY());
                            break;
                        case MotionEvent.ACTION_CANCEL:
                        case MotionEvent.ACTION_UP:
                            mIsLongPress = false;
                            mHandler.removeCallbacks(longPress);
                            break;
                        }
                        return false;
                    }
                });
    }

    private void actionOne() {
        Log.e("XXX", "Long press!!!");
    }

    private void actionTwo(float f, float g) {
        Log.e("XXX", "Scrolling for X : " + f + " Y : " + g);
    }

}

关于Android长按滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12093232/

相关文章:

javax 认证失败

java - 如何解析并返回指向单独的 strings[] 或字符串的链接列表?

android - 从另一个进程中的应用程序上下文启动 Activity

css - 滚动条不显示

scroll - JBLineChartView 可滚动

ios - 长按 UIButton 上的手势识别器?

android - 长按 Android Chrome 上的项目会显示上下文菜单,但随后会显示不需要的拖放项目

javascript - Android webview 无法正常显示

html - 滚动时如何使 div 跟随?

ios - 如何在 iOS 中创建自定义控件?