解决ListView和ScrollView滚动和事件的分发冲突
2016-12-16 本文已影响42人
RoboyCore
解决ListView嵌套,的高度问题
重写listView的onMeasure方法
得到的int值前2bit是测量模式,后30bit是具体宽高数值
1.将ListView高度设置为最大值(onMeasure方法int值有32位,前两位是模式、后30是是宽或高)/屏幕宽度,
这样当触摸到ListView 时就能一直滑动。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//widthMeasureSpec:组成:2位模式+30位数字
//最大值
int hightSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
//屏幕的高度
int hightSpec2=MeasureSpec.makeMeasureSpec(getResources().getDisplayMetrics().heightPixels,MeasureSpec.AT_MOST);
//测量(两种选一种)
super.onMeasure(widthMeasureSpec, hightSpec2);
}
2。滚动事件
//滚动冲突
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction())
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
//告诉父控件,我需要此事件
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
//
getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return super.onTouchEvent(ev);
}