Jude95 / SwipeBackHelper

make your activity can swipe to close
1.38k stars 268 forks source link

2.0.2版本手势事件有bug #5

Closed han361769045 closed 8 years ago

han361769045 commented 8 years ago

setSwipeEdge(200) 200 以外的滑动

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (!mEnable) {
        return false;
    }
    try {
        mDragHelper.processTouchEvent(event);  出现异常
    } catch (Exception e) {
        // FIXME: handle exception
        // issues #9
        Log.i("SWIP", "ERROR"); 打出日志
        return false; 不执行这个return 
    }
    return true;  执行这个 return
}

导致 页面 假死 (recyleView )不能滑动 再一次 向右滑动在 200 以内才会 好使

Jude95 commented 8 years ago

?能详细描述下如何复现这个BUG?

han361769045 commented 8 years ago

我用了 recyleView 可以上滑下滑 加载刷新的 当我 在 setSwipeEdge() 以外的 地方向右滑动的时候 导致页面 卡死, 上滑下滑 也不好使 只有再次在 setSwipeEdge()向右滑动,不结束这个activity 然后就好使了。

han361769045 commented 8 years ago

我dubug 跟踪了一下 是因为 mDragHelper.processTouchEvent(event); 出现异常 catch里的return false 还没有执行,却执行了 return true ,拦截了 所有的 MotionEvent 事件导致的

Jude95 commented 8 years ago

发现了.呃.好严重的BUG,马上解决。先别设置滑动范围吧。

han361769045 commented 8 years ago

嗯。还有就是 为什么不走 catch里的return false 却执行了 return true 明明出现异常了 我很不理解

Jude95 commented 8 years ago

终于修复了。看看还有没有问题吧。手势处理是深坑啊。果然把持不住ViewDragHelper的源码。 另外确实catch到了异常,也返回的false。不过是在onTouchEvent中。返回并没有什么用。问题出在onInterceptTouchEvent。Move时拦截事件时忽略了可触范围,导致事件流全部流向了自己的onTouchEvent。而后面又考虑了范围没处理。

han361769045 commented 8 years ago

这个问题解决了,但是貌似又出现别的问题了, 我有个页面 就是个简单的Linear布局什么也没有 但是右划 没效果

Jude95 commented 8 years ago

(☍﹏⁰) 。。你看看那个页面的配置是什么。我要怎么重现这个bug。

han361769045 commented 8 years ago

BaseActivity

SwipeBackHelper.onCreate(this); SwipeBackHelper.getCurrentPage(this)//获取当前页面 .setSwipeBackEnable(true)//设置是否可滑动 .setSwipeEdge(80)//可滑动的范围。px。200表示为左边200px的屏幕 .setSwipeEdgePercent(0.08f)//可滑动的范围。百分比。0.2表示为左边20%的屏幕 .setSwipeSensitivity(0.5f)//对横向滑动手势的敏感程度。0为迟钝 1为敏感 // .setScrimColor(Color.BLUE)//底层阴影颜色 .setClosePercent(0.8f)//触发关闭Activity百分比 .setSwipeRelateEnable(true)//是否与下一级activity联动(微信效果)。默认关 .setSwipeRelateOffset(200)//activity联动时的偏移量。默认500px。

另外 一个继承 BaseActivity 然后当向右滑动的时候 11-02 08:53:06.831 23438-23438/? I/SWIP: cancel 11-02 08:53:06.831 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.831 23438-23438/? I/SWIP: cancel 11-02 08:53:06.851 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.861 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.881 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.901 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.911 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.931 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.941 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.961 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.981 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.991 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.991 23438-23438/? I/SWIP: onTouchEvent 11-02 08:53:06.991 23438-23438/? I/SWIP: cancel

Jude95 commented 8 years ago

但我像你这样设置。没问题啊。 setSwipeEdgePercent(0.08f)。只能从边缘开始滑动。

han361769045 commented 8 years ago

我的别activity(里面有listview 或者是 recyleView)继承这个Baseactivity 都没有问题 但是 就是 简单的布局(没有别的可以滑动的内容)的 activity 右滑就不好使 然后打出的log就是上面那个log

Jude95 commented 8 years ago

好了。看还有问题吗,不好意思让你当测试了。

han361769045 commented 8 years ago

嗯这个问题修复了,目前还没有发现别的问题。 辛苦了!