Android ScrollView 嵌套 ScrollView 滑动

来源:互联网 发布:centos查看开放端口 编辑:程序博客网 时间:2024/05/16 12:48

滑动问题就是解决事件的分发问题
MainActivity不需要任何代码,直接在布局中使用就可以了。

1:相配合的自定义布局,onInterceptTouchEvent MotionEvent.ACTION_DOWN情况下拦截情况

package com.example.test.scrollnesttest;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.RelativeLayout;public class MyRelativelayout extends RelativeLayout {    public MyRelativelayout(Context context) {        super(context);    }    public MyRelativelayout(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        if (ev.getAction() == MotionEvent.ACTION_DOWN) {            return false;        } else {            return true;        }    }}

2:自定义MyScroll 嵌套在Scrollview中
需要了解requestDisallowInterceptTouchEvent();
事件是由父view传递到子view 此方法就是提醒父view是否拦截该事件。

package com.example.test.scrollnesttest;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.ScrollView;/** * Created by win7 on 2016/9/13. */public class MyScroll extends ScrollView {    public MyScroll(Context context) {        super(context);    }    public MyScroll(Context context, AttributeSet attrs) {        super(context, attrs);    }    private static final String TAG = "InnerScrollView";    private int oldY;    @Override    public boolean onTouchEvent(MotionEvent ev) {        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                Log.e(TAG, "ACTION_DOWN: " + ev.getY());                oldY = (int) ev.getY();                //提醒父view不要拦截down事件                getParent().requestDisallowInterceptTouchEvent(true);                break;            case MotionEvent.ACTION_MOVE:                Log.e(TAG, "ACTION_MOVE: " + ev.getY());                View childView = getChildAt(0);                Log.e(TAG, "childView.getMeasuredHeight(): " + childView.getMeasuredHeight());                Log.e(TAG, "getScrollY(): " + getScrollY());                Log.e(TAG, "getHeight(): " + getHeight());                if ((getScrollY() == 0 && ev.getY() - oldY > 5) || (childView.getMeasuredHeight() <= getScrollY() + getHeight() && oldY - ev.getY() > 5)) {                    Log.e(TAG, "ev.getY() - oldY " + (ev.getY() - oldY));                    //当滑动到最顶端和最底端的时候提醒父view拦截move事件                    getParent().requestDisallowInterceptTouchEvent(false);                }                oldY = (int) ev.getY();                break;            case MotionEvent.ACTION_UP:                break;        }        return super.onTouchEvent(ev);    }}

布局中直接调用即可

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <TextView            android:layout_width="match_parent"            android:layout_height="300dp"            android:gravity="center"            android:text="Hello World!" />        <com.example.test.scrollnesttest.MyRelativelayout            android:layout_width="match_parent"            android:layout_height="wrap_content">            <com.example.test.scrollnesttest.MyScroll                android:id="@+id/scroll"                android:layout_width="match_parent"                android:layout_height="300dp"                android:background="#00ff00">                <LinearLayout                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:orientation="vertical">                    <TextView                        android:layout_width="match_parent"                        android:layout_height="match_parent"                        android:gravity="center"                        android:text="kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" />                    <TextView                        android:layout_width="match_parent"                        android:layout_height="match_parent"                        android:layout_marginTop="100dp"                        android:gravity="center"                        android:text="ddddddddddddddddddddddddkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" />                    <TextView                        android:layout_width="match_parent"                        android:layout_height="match_parent"                        android:layout_marginTop="100dp"                        android:gravity="center"                        android:text="ffffffffffffffffffffffffffffffffffkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" />                </LinearLayout>            </com.example.test.scrollnesttest.MyScroll>        </com.example.test.scrollnesttest.MyRelativelayout>        <TextView            android:layout_width="match_parent"            android:layout_height="300dp"            android:gravity="center"            android:text="Hello World!" />        <com.example.test.scrollnesttest.MyRelativelayout            android:layout_width="match_parent"            android:layout_height="wrap_content">            <com.example.test.scrollnesttest.MyScroll                android:layout_width="match_parent"                android:layout_height="300dp"                android:background="#00ff00">                <LinearLayout                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:orientation="vertical">                    <TextView                        android:layout_width="match_parent"                        android:layout_height="match_parent"                        android:gravity="center"                        android:text="kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" />                    <TextView                        android:layout_width="match_parent"                        android:layout_height="match_parent"                        android:layout_marginTop="100dp"                        android:gravity="center"                        android:text="ddddddddddddddddddddddddkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" />                    <TextView                        android:layout_width="match_parent"                        android:layout_height="match_parent"                        android:layout_marginTop="100dp"                        android:gravity="center"                        android:text="ffffffffffffffffffffffffffffffffffkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" />                </LinearLayout>            </com.example.test.scrollnesttest.MyScroll>        </com.example.test.scrollnesttest.MyRelativelayout>        <TextView            android:layout_width="match_parent"            android:layout_height="300dp"            android:gravity="center"            android:text="Hello World!" />    </LinearLayout></ScrollView>

点击demo下载地址

0 0
原创粉丝点击