package com.withiter.quhao.view; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ListView; import android.widget.ScrollView; import com.withiter.quhao.util.QuhaoLog; public class InnerListView extends ListView { private static String TAG = "InnerListView"; private ScrollView parentScroll; private int maxHeight; public InnerListView(Context context) { super(context); } public InnerListView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: setParentScrollAble(false);// 当手指触到listview的时候,让父ScrollView交出ontouch权限,也就是让父scrollview // 停住不能滚动 QuhaoLog.d(TAG, "onInterceptTouchEvent down"); case MotionEvent.ACTION_MOVE: QuhaoLog.d(TAG, "onInterceptTouchEvent move"); break; case MotionEvent.ACTION_UP: QuhaoLog.d(TAG, "onInterceptTouchEvent up"); case MotionEvent.ACTION_CANCEL: QuhaoLog.d(TAG, "onInterceptTouchEvent cancel"); setParentScrollAble(true);// 当手指松开时,让父ScrollView重新拿到onTouch权限 break; default: break; } return super.onInterceptTouchEvent(ev); } /** * 是否把滚动事件交给父scrollview * * @param flag */ private void setParentScrollAble(boolean flag) { parentScroll.requestDisallowInterceptTouchEvent(!flag);// 这里的parentScrollView就是listview外面的那个scrollview } protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (maxHeight > -1) { heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); System.out.println(getChildAt(0)); } public ScrollView getParentScroll() { return parentScroll; } public void setParentScroll(ScrollView parentScroll) { this.parentScroll = parentScroll; } public int getMaxHeight() { return maxHeight; } public void setMaxHeight(int maxHeight) { this.maxHeight = maxHeight; } }