一个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;
}
}