你要先描述你要实现什么样的功能,再贴代码,别人看起来更清晰些。
创新互联公司,专注为中小企业提供官网建设、营销型网站制作、响应式网站开发、展示型做网站、网站建设等服务,帮助中小企业通过网站体现价值、有效益。帮助企业快速建站、解决网站建设与网站营销推广问题。
你的主要问题就是两个事件都响应了相同的功能,造成冲突,对吧?那么你可以设置一个成员变量(或者静态变量)比较mHasHandled,先响应的事件把它设置为true,后响应的事件监测到它已经是true了就不再处理了。
1、内容需要通过卡片的形式来展现,还有支持加载更多,所以最底部使用RecyclerView,最好是做成预加载形式,提前n页加载下一页,这样体验更好。
2、为了展示更多内容卡片内要支持垂直分页,这时候我使用了ViewPager,一是可以更好的管理分页内容,二是ViewPager的垂直分页容易实现,三是可以处理不同控件之前的滑动冲突
3、ViewPager第一页使用的可回弹的ScrollView,可以在下拉的时候做一些动画之类的操作,例如关注操作等。
4、ViewPager的第二页只是一个普通的ScrollView,具体使用可以根据实际情况来处理
1、RecycleView的分页效果基于PagerSnapHelper,RecyclerView在25.1.0版本中添加了一盒基于SnapHelper的子类PagerSnapHelper,可以使RecyclerView像ViewPager一样的效果,一次只能滑一页,而且居中显示。
2、卡片的效果是在滑动的时候根据RecycleView的偏移量计算缩放因子进行缩放
3、RecycleView的item内有一个垂直分页的VerticalViewPager,VerticalViewPager是在ViewPager上转换X,Y即可
4、解决ViewPager与RecycleView滑动的冲突,在ViewPager中屏蔽父视图的上下滑动事件
5、解决ViewPager子视图ScrollView的冲突,在ViewPager中拦截事件
6、解决ViewPager与BounceScrollView的冲突,在下拉过程中有时会被ViewPager拦截
以上就是此项目中的所有关键点。
ScrollViewDemo 欢迎Star
RecycleViewCardGallary
在Android中,对一个View同时调用OnTouch事件和OnClick事件时,导致事件冲突,比如onClick事件打算执行A动作,OnTouch事件打算执行B动作,但是在实际使用时会发现,当调用OnTouch时,有可能会同时执行A,B两个动作,这是因为OnClick事件本身就是在OnTouch事件中发生的;在onTouch事件中,如果返回true,就不会执行onClick,返回false,就同时执行onClick方法,要想把OnTouch和onClick事件完全的区分。可能过下列方法,解决该冲突问题:
就是在 OnTouch中的MotionEvent.ACTION_DOWN 时,记录下点(X1,Y1),
在 MotionEvent.ACTION_UP 时,记录下点(X2,Y2),然后比对 俩点之间的距离,如果小于一个较小数值(比如5),就认为是Click事件,onTouch中返回false,如果距离较大,可以当作onTouch事件去处理,返回true:
示范如下:
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
x1 = event.getX();
y1 = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
x2 = event.getX();
y2 = event.getY();
if (Math.abs(x1 - x2) 6) {
return false;// 距离较小,当作click事件来处理
}
if(Math.abs(x1 - x2) 60){ // 真正的onTouch事件
}
}
return true;// 返回true,不执行click事件
}