viewpager内嵌套scrollview内部控件点击事件响应不及时

在自定义的MScrollview和MViewPager中,遇到点击事件响应延迟的问题。当内部的TextView、CheckBox和Button点击时,响应不及时。尝试了通过重写onTouchEvent和onInterceptTouchEvent来处理滑动和点击事件的冲突,但效果不佳。寻求解决方案来确保内部控件的点击事件能正常及时响应。
我在viewpager内部嵌套scrollview,因为我的每个page有可能超出屏幕,并且我都从写了viewpager和scrollview,但是内部的textview和CheckBox以及button相应点击事件的时候有向不及时,
这是我重写的两个控件
public class MScrollview extends ScrollView {
GestureDetector gestureDetector;
private float xDistance, yDistance, xLast, yLast;  
public MScrollview(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

@SuppressWarnings("deprecation")
public MScrollview(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
gestureDetector = new GestureDetector(new Yscroll());
setFadingEdgeLength(0);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
return super.onTouchEvent(ev);
}

public MScrollview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}

public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();

xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;

if (xDistance <yDistance) {
return true;
}

}

return super.onInterceptTouchEvent(ev);
}


class Yscroll extends GestureDetector.SimpleOnGestureListener {

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// 控制手指滑动的距离
if (Math.abs(distanceY) >= Math.abs(distanceX)) {
return true;
}
return false;
}
}
}

public class MViewPager extends ViewPager {

private float xDistance, yDistance, xLast, yLast; 

public MViewPager(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

public MViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}



@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
// TODO Auto-generated method stub
switch (arg0.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = arg0.getX();
yLast = arg0.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = arg0.getX();
final float curY = arg0.getY();

xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;

if (xDistance>yDistance) {
return true;
}else{

}

}
return super.onInterceptTouchEvent(arg0);
}

}

有哪位大神指导一下,怎么解决内部的控件点击事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值