ScrollView嵌套ViewPager,ViewPage動態設置高度,嵌套事件衝突——滑動衝突解決方法

1、創建自定義ViewPager

 

public class ViewPagerForScrollView extends ViewPager {

    int myh=0 ;
    boolean ifme =false;

    public ViewPagerForScrollView(Context context) {
        super(context);
        Log.i("lgq","高度==111=  " );
    }

    public ViewPagerForScrollView(Context context, AttributeSet attrs) {

        super(context, attrs);
        Log.i("lgq","高度==22==  " );
        TestObServernotice.getInstance().addObserver(deleteObserver);
    }

    private Observer deleteObserver = new Observer() {
        @Override
        public void update(int id, int intparam, String param, Bitmap bitmap) {
            if (id == 111) {
                myh = intparam;
                ifme = true;
            }
        }
    };



    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int height = 0;
        if (ifme){

            View child = getChildAt(myh);
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            height = h;
        }else {
            for (int i = 0; i < getChildCount(); i++) {
                View child = getChildAt(i);
                child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
                int h = child.getMeasuredHeight();
                Log.i("lgq","高度====  " +h);
                if (h > height)
                    height = h;
            }
        }

        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
//        heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

2、ScrollView屬性

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true">

 

3、通知刷新viewpager的高度

@Override
public void onPageSelected(int i) {
    mViewPager.requestLayout();
    TestObServernotice.getInstance().notifyObserver(111, i, "6666", null);
    Log.i("lgq","經理=====  "+i);
}

 

 

 實現樣式

長高度內容                                                                                                                 短高度內容

  

 

實現demo:https://download.csdn.net/download/meixi_android/12390494

bug交流:qq1085220040

 

解決事件衝突方法:

自定義重寫View添加如下方法

 

public void setNestedpParent(ViewGroup parent) {
    this.parent = parent;
}

 

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
//        LgqLogutil.e("分發listview2222222");
 
            if (parent != null) {
                parent.requestDisallowInterceptTouchEvent(true);
            }
        return super.dispatchTouchEvent(event);
    }

 

設置事件攔截——停止事件傳遞

HorizontalListView horizontalListView = holder.getView(R.id.myhoriz);
horizontalListView.setNestedpParent((ViewGroup)horizontalListView.getParent());

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章