android---在ScrollView中嵌套ViewPager

在ScrollView 中如果有嵌套了ViewPager 那么 ViewPager的横向滑动将被ScrollView拦截掉,所以我们需要重写ScrollView来判断用户的手势,当用户手势在X方向上的距离大于在Y方向上的距离的时候判断是向左滑动,此时屏蔽ScrollView的滑动操作。反过来,就Y》X,就判定是ScrollView的滑动:重写的ScrollView代码如下:


package cn.leature.istarbaby.view;
/**
 * xu
 */
import android.content.Context;
import android.renderscript.Sampler;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class ScrollViewHasViewPager extends ScrollView {

//决定scrollview是否可以滑动
private boolean canScroll;
//手势
private GestureDetector gestureDetector;
public ScrollViewHasViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

public ScrollViewHasViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
gestureDetector = new GestureDetector(new YScrollView());
canScroll = true;
}

public ScrollViewHasViewPager(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
if(ev.getAction() == MotionEvent.ACTION_UP)
{
canScroll = true;
}
return super.onInterceptTouchEvent(ev)&&gestureDetector.onTouchEvent(ev);
}


class YScrollView extends SimpleOnGestureListener{
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// TODO Auto-generated method stub
if(canScroll)
{
if(Math.abs(distanceY)>= Math.abs(distanceX))
{
canScroll = true;
}
else
{
canScroll = false;
}
}
return canScroll;
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值