ScrollView嵌套ListView 两者滚动互不影响

来源:互联网 发布:cf踢腿外设软件 编辑:程序博客网 时间:2024/05/20 21:18

一个ScrollView中间嵌套ListView,当手指滑动ListView的时候,它滚动,当手指滑动ListView以外的部分ScrollView滚动。

布局代码

<?xml version="1.0" encoding="utf-8"?><com.cn.horizon.life.widgets.MyScrollView     xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:scrollbars="vertical">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="1000dp"        android:paddingTop="80dp"        android:background="#CDCDCD">        <com.cn.horizon.life.widgets.MyListView            android:id="@+id/lvList"            android:layout_width="match_parent"            android:layout_height="390dp"            android:background="#ff0" />    </RelativeLayout></com.cn.horizon.life.widgets.MyScrollView>

MyScrollView代码如下

import android.content.Context;import android.os.Build;import android.support.annotation.RequiresApi;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.AbsListView;import android.widget.HorizontalScrollView;import android.widget.ListView;import android.widget.ScrollView;public class MyScrollView extends ScrollView {    public MyScrollView(Context context) {        super(context);    }    public MyScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)    public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {        super(context, attrs, defStyleAttr, defStyleRes);    }    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        return super.dispatchTouchEvent(ev);    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        boolean intercept = false;        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                intercept = false;                break;            case MotionEvent.ACTION_MOVE:                View child = getFocusedChild();                if (child instanceof AbsListView)                    intercept = true;                else                    intercept = false;                break;            case MotionEvent.ACTION_UP:                intercept = false;                break;        }        return intercept;    }}
1 0
原创粉丝点击