Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为ViewPager的子View添加事件后,长按屏幕AutoScroll无法stop #5

Open
lightSky opened this issue Sep 21, 2014 · 2 comments

Comments

@lightSky
Copy link
Contributor

群主好啊,最近使用你的AutoViewPager的时候,发现了一个小问题。
通常当手指按住屏幕的时候,是可以暂停滑动的。当我为ImageView(我的ViewPagerAdpter的Item是ImageView)设定了onClick事件的时候,用手指长按屏幕就无法暂停滑动了。

我的理解是这样的:
根据View事件的分发机制,Event是从ViewPager的dispatchTouchEvent开始的,当在ViewPager的onInterceptTouchEvent中没有返回true,也就没有拦截事件的时候,就会分发到ImageView中,由于为ImageView设置了onClick事件,所以在onTouchevent里面会执行onClick事件,从而消费掉了该事件,因此事件就不会返回到ViewPager的onTouchEvent中,也就无法处理相应的逻辑了。

我的解决方案是:
将ViewPager中onTouchEvent的逻辑放到dispatchTouchEvent或者onInterceptEvent中去,这样就可以先控制ViewPager的stop或者start了,然后再将事件传递到ImageView,让其自行处理。

上面的长按和onClick事件有点矛盾,下面是原因:
这里说下onClick和onLongClick,我通过log看到,即使你设置了onLongClick事件的处理,但是依旧会执行onClick事件,这是因为onLongClick事件默认返回了FALSE,事件没有消费掉,导致在action up的时候执行了onClick。所以也就是不管你是不是长按屏幕,都会执行onClick事件。也就是我长按屏幕时,事件被ImageView消费掉导致没法stop的原因。

在实际开发中,应该避免onClick和onLongClick同时触发的情况,所以在onLongClick方法里面返回FALSE,就可以了。当然这和上面的问题关联不是很大。

题外话:
看了下淘宝和携程还有网易音乐的广告栏
淘宝没有任何的限制,长按,或者move的时候,都可以继续轮循的。
携程的处理了move的情况,但没有处理长按的情况。
网易两种情况都处理了,并且onClick和onLongClick事件都响应了

这是我结合ViewPagerIndicator和你的AutoScrollViewPager而成的项目:https://github.com/lightSky/InfiniteAutoScroolView

@Trinea
Copy link
Owner

Trinea commented Sep 22, 2014

好长,这两天晚点我抽点时间看看,你也可以把修改的代码 push 过来

@hloong
Copy link

hloong commented Mar 6, 2015

看了最新淘宝客户端长按还是继续轮播,是它故意这样设计的还是算一个bug?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants