Android ScrollView和OnTouch冲突解决(最新)

来源:互联网 发布:淘宝发布宝贝没有品牌 编辑:程序博客网 时间:2024/06/08 12:10

Android ScrollView和OnTouch冲突解决(最新)

好了,思想+代码。

看了好多别人写的解决方法,自定义ScrollView

代码如下:

package com.aierjun.woxiangwoxiang.widget;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ScrollView;/** * Created by aierJun on 2017/1/16. */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 defStyle)        {            super(context, attrs, defStyle);        }        //这个方法如果返回 true 的话 两个手指移动,启动一个按下的手指的移动不能被传播出去。        public boolean onInterceptTouchEvent(MotionEvent event)        {            super.onInterceptTouchEvent(event);            return false;        }        //这个方法如果 true 则整个Activity 的 onTouchEvent() 不会被系统回调   但当true是Scrollview的滑动失效        public boolean onTouchEvent(MotionEvent event)        {            super.onTouchEvent(event);            return false;        }}

注意:这个方法个人尝试实现不了,但这里面标注的两个方法对考虑很有帮助。

然后找寻方法时我发现了一个方法OnTouchListener:

看了资料分析:

地址:http://blog.csdn.net/huiguixian/article/details/22193977

点击直接跳转地址

综合来讲:

onTouchListener的onTouch方法优先级比onTouchEvent高,会先触发。

假如onTouch方法返回false会接着触发onTouchEvent,反之onTouchEvent方法不会被调用。

内置诸如click事件的实现等等都基于onTouchEvent,假如onTouch返回true,这些事件将不会被触发。

最后实现

代码如下:

/** * Created by aierJun on 2017/1/16. */public class MainActivity extends Activity {    private ScrollView scrollView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findView();        initView();    }    private void findView() {        scrollView= (ScrollView) findViewById(R.id.scrollView);    }    private void initView() {        scrollView.setOnTouchListener(onTouchListener);    }    float startY;    float endY;    View.OnTouchListener onTouchListener=new View.OnTouchListener() {        @Override        public boolean onTouch(View view, MotionEvent motionEvent) {            switch (motionEvent.getAction()){                case MotionEvent.ACTION_DOWN:                    startY=motionEvent.getY();                    break;                case MotionEvent.ACTION_UP:                    endY=motionEvent.getY();                    break;                default:                    if (endY-startY>50){                    }else {                    }            }            //这里的false和前面的一样            return false;        }    };}

转载请注明出处,谢谢!

1 0
原创粉丝点击