android – 当从View的LongPress触发DOWN事件时,从Dialog注册UP / CANCEL

我有一个UX要求,即用户通过长按GridView中的单元格来触发Dialog.

>显示对话框时,用户必须能够在屏幕周围移动手指/拇指,而不会在离开GridView单元格边界时触发UP / CANCEL事件.
>当用户最终断开与屏幕的联系时,我正在寻找捕获. GridView似乎记录了UP / CANCEL的一些误报,我们没有看到使用任何其他视图.
>问题是原始视图捕获所有触摸事件,因为DOWN被它捕获.
>在原始视图的UP事件之后,对话框才会注册/看不到任何触摸.

我尝试取消原始触摸事件并使用dispatchTouch()等.没有快乐.

有任何想法吗?

解决方法

我在我的一个项目中使用了类似的东西.

将OnTouchListener分配给gridView的每个单元格并覆盖OnTouch方法.

@Override
public boolean onTouch(View v,MotionEvent event) {

boolean isLongpressed;

int mSwipeSlop = ViewConfiguration.get(context).
                getScaledTouchSlop();

boolean mSwiping;

switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        handler.postDelayed(mLongpressed,1000);
        break;

    case MotionEvent.ACTION_CANCEL:
        handler.removeCallbacks(mLongpressed);
        break;

    case MotionEvent.ACTION_MOVE:
        float x = event.getX() + v.getTranslationX();
            float deltaX = x - mDownX;
            float deltaXAbs = Math.abs(deltaX);
            float y = event.getY() + v.getTranslationY();
            float deltaY = Y - mDownY;
            float deltaYAbs = Math.abs(deltaY);
            float absdist = Math.sqrt(Math.pow(deltaXAbs,2) + Math.pow(deltaXAbs,2));
            if (!mSwiping) {
                if (absdist > mSwipeSlop) {
                    mSwiping = true;
                    handler.removeCallbacks(mLongpressed);
                }
            }
        break;

    case MotionEvent.ACTION_UP:
        handler.removeCallbacks(mLongpressed);
        if (isLongpressed) {
             // DO ACTION UP
        }
        break;

    default: 
        return false;
    }
return true;
}

在runnable mLongpressed中打开对话框,该对话框仅在用户触摸相同位置一秒钟时才会运行.您可以更改他可以移动的距离以及按需注册为长按的时间.但是,我建议使用getScaledTouchSlop()作为距离.

final Handler handler = new Handler(); 
Runnable mLongpressed = new Runnable() { 
    public void run() { 
        // OPEN DIALOG
        isLongpressed = true;
    }   
};

通过在我的项目中使用此代码,用户可以在整个屏幕上移动手指而不会触发ACTION_UP.只有当他举起手指时,它才被触发.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...