ScrollView和VerticalViewPager的滑动冲突

qq_41882338 2018-03-29 07:06:28
这是借鉴网上大神重写的scrollview



public class MyScrollView extends ScrollView {
public MyScrollView(Context context) {
super(context);
}

public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}


private int downY = 0;//初始化按下时Y坐标变量

@Override
public boolean onTouchEvent(MotionEvent ev) {
View childView = getChildAt(0);//获取孩子控件
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//记录按下时的y坐标(用来判断是向下还是向上滑动的操作)
downY = (int) ev.getY();
break;
case MotionEvent.ACTION_MOVE:
//判断向上滑动的情况,滑动到底部
// 当朝着Y方向滑动到底部的坐标(即scrollview的最大滑动量)+scrollview本身的高度大于或等于了孩子控件的高度
//说明这时要进行页面切换了,scrollview就返回false,不去进行触摸操作,给viewpager去向下翻页
if (downY > ev.getY() && childView != null && getScrollY() + getMeasuredHeight()
>= childView.getMeasuredHeight()) {
return false;
}
//判断向下滑动的情况,到顶部
//如果朝着Y方向滑动的坐标是小于等于0,说明是向上翻页的趋势,这时也返回false,给viewpager去翻页
if (downY < ev.getY() && getScrollY() <= 0) {
return false;
}
break;
}
return super.onTouchEvent(ev);
}
}




这是我的verticalviewpage
public class VerticalViewPager extends ViewPager {

public VerticalViewPager(Context context) {
this(context, null);
}

public VerticalViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
//设置viewpage的切换动画,这里设置才能真正实现垂直滑动的viewpager
setPageTransformer(true, new DefaultTransformer());
}

/**
* 拦截touch事件
*
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
boolean intercept = super.onInterceptTouchEvent(swapEvent(ev));
swapEvent(ev);
return intercept;
}


@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(swapEvent(ev));
}

private MotionEvent swapEvent(MotionEvent event) {
//获取宽高
float width = getWidth();
float height = getHeight();
//将Y轴的移动距离转变成X轴的移动距离
float swappedX = (event.getY() / height) * width;
//将X轴的移动距离转变成Y轴的移动距离
float swappedY = (event.getX() / width) * height;
//重设event的位置
event.setLocation(swappedX, swappedY);
return event;
}
}



这样弄只有 只能解决从上往下切换viewpage的滑动冲突,可是如果要切换上一个page时就会发生冲突,有没有大神指导下,许多东西还不是很懂,在做毕业设计
...全文
562 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
十二月的消亡 2018-03-29
  • 打赏
  • 举报
回复
NetedScrollView

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧