RefreshScrollviewLayout下嵌套ViewPager横向滑动冲突解决
来源:互联网 发布:软件注册赚钱靠谱吗 编辑:程序博客网 时间:2024/05/22 13:14
最近做的有个项目,主要是轮播图这部分,RefreshScrollviewLayout下嵌套viewpager ,在滑动轮播图的时候,发现如果横向滑动稍微有点斜的话,就会触动RefreshScrollviewLayout的下拉刷新。这肯定是事件传递的问题,
http://blog.csdn.net/gdutxiaoxu/article/details/52939127
http://www.2cto.com/kf/201705/637673.html
通过这两篇文章解决的问题:
重写SwipeRefreshLayout(出于google):
import
android.content.Context;
import
android.support.v4.widget.SwipeRefreshLayout;
import
android.util.AttributeSet;
import
android.view.MotionEvent;
import
android.view.ViewConfiguration;
/**
* Created by admin on 2017/5/5.
*/
public
class
MySwipeRefreshLayout
extends
SwipeRefreshLayout {
private
float
startY;
private
float
startX;
// 记录viewPager是否拖拽的标记
private
boolean
mIsVpDragger;
private
final
int
mTouchSlop;
public
MySwipeRefreshLayout(Context context, AttributeSet attrs) {
super
(context, attrs);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
}
@Override
public
boolean
onInterceptTouchEvent(MotionEvent ev) {
int
action = ev.getAction();
switch
(action) {
case
MotionEvent.ACTION_DOWN:
// 记录手指按下的位置
startY = ev.getY();
startX = ev.getX();
// 初始化标记
mIsVpDragger =
false
;
break
;
case
MotionEvent.ACTION_MOVE:
// 如果viewpager正在拖拽中,那么不拦截它的事件,直接return false;
if
(mIsVpDragger) {
return
false
;
}
// 获取当前手指位置
float
endY = ev.getY();
float
endX = ev.getX();
float
distanceX = Math.abs(endX - startX);
float
distanceY = Math.abs(endY - startY);
// 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。
if
(distanceX > mTouchSlop && distanceX > distanceY) {
mIsVpDragger =
true
;
return
false
;
}
break
;
case
MotionEvent.ACTION_UP:
case
MotionEvent.ACTION_CANCEL:
// 初始化标记
mIsVpDragger =
false
;
break
;
}
// 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。
return
super
.onInterceptTouchEvent(ev);
}
}
重写ScrollView(出于google):import
android.content.Context;
import
android.util.AttributeSet;
import
android.view.MotionEvent;
import
android.widget.ScrollView;
/**
* Created by admin on 2017/5/5.
*/
public
class
VerticalScrollView
extends
ScrollView {
private
float
xDistance, yDistance, lastX, lastY;
public
VerticalScrollView(Context context, AttributeSet attrs) {
super
(context, attrs);
}
@Override
public
boolean
onInterceptTouchEvent(MotionEvent ev) {
switch
(ev.getAction()) {
case
MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
lastX = ev.getX();
lastY = ev.getY();
break
;
case
MotionEvent.ACTION_MOVE:
final
float
curX = ev.getX();
final
float
curY = ev.getY();
xDistance += Math.abs(curX - lastX);
yDistance += Math.abs(curY - lastY);
lastX = curX;
lastY = curY;
if
(xDistance > yDistance)
return
false
;
}
return
super
.onInterceptTouchEvent(ev);
}
}
阅读全文
1 0
- RefreshScrollviewLayout下嵌套ViewPager横向滑动冲突解决
- 解决ViewPager嵌套,滑动冲突
- 解决ViewPager嵌套ViewPager滑动冲突问题
- 解决ViewPager嵌套ViewPager滑动冲突问题
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
- ViewPager,ScrollView嵌套ViewPager滑动冲突解决
- ViewPager里面嵌套HorizontalListView或者自定义ViewGroup横向滑动事件冲突--解决
- ScrollView嵌套ViewPager滑动冲突的解决
- Listview 嵌套 Viewpager 滑动冲突的解决
- 解决嵌套viewpager滑动冲突的解决方案
- QScrollArea使用的小问题
- bootstrap table实现server分页序号连续(当前页从上一页的结束序号开始)
- activiti根据当前节点获取下一个UseTask节点
- JavaScript预解析过程
- The Triangle 【nyoj-18】【动态规划】
- RefreshScrollviewLayout下嵌套ViewPager横向滑动冲突解决
- C++ trivial、non-trivial及POD类型
- 性能优化——记高性能MySQL
- 阿里 离线数据同步工具 DataX 初试
- Java开发中的23种设计模式详解
- 2017多校训练6-1008:Kirinriki(HDU6103)
- 为什么用下标遍历容器如此有用
- 1111111111111111111111111111
- Spark---Datasource(JDBC)---Scala