废话不多说了,直接给大家贴代码了,具体代码如下所示:
package demo.hq.com.fby; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.widget.LinearLayout; /** * Created by huqing on 2016/12/7. * 思路: * 分内外部拦截 * 在父布局中,onInterceptTouchEvent先判断是否拦截滑动,true 拦截 直接进入父布局的onTouch方法 ;false 进入子布局的onTouch方法 */ public class MyParentView extends LinearLayout { /** * 每向下Move移动的距离 */ private int mMove; /** * 落下点的位置 */ private int yDown; /** * 移动点的位置 */ private int yMove; /** * 一共向下挪动的距离 */ private int downDistance = 0; public MyParentView(Context context, AttributeSet attrs) { super(context, attrs); } boolean intercept = false; /** * 外部拦截, * 如果是向下滑动 则为true,交给该控件处理,向上false就交给子控件处理吧 * 所以向上的事件 子控件都能获取到的 * * @param ev * @return */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: yDown =(int) ev.getY(); break; case MotionEvent.ACTION_MOVE: yMove = (int) ev.getY(); if (yMove > yDown) { intercept = true; Log.d("hqq", "拦截~~~~~~~~~~~~~~~~~~"); } else if (yMove < yDown) { intercept = false; Log.d("hqq", "不拦截~~~~~~~~~~~~~~~~~~"); } break; case MotionEvent.ACTION_UP: break; } //true 拦截,进入该控件的onTouchEvent方法 false:进入子控件的OnTouchEvent boolean returnInterCept = intercept; intercept = false; return returnInterCept; } @Override public boolean onTouchEvent(MotionEvent event) { Log.e("hq", "father onTouch"); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: yDown = y; break; case MotionEvent.ACTION_MOVE: if (downDistance>=250){ }else { yMove = y; if (yMove - yDown > 0) { mMove = yMove - yDown; downDistance += mMove; if (downDistance>=250){ layout(getLeft(),downDistance, getRight(), getHeight() + downDistance); }else { layout(getLeft(), getTop() + mMove, getRight(), getBottom() + mMove); } } } break; case MotionEvent.ACTION_UP: layout(getLeft(), getTop() - downDistance, getRight(), getBottom() - downDistance); downDistance = 0; break; } return true;// return super.onTouchEvent(event); } }
package demo.hq.com.fby; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.widget.ScrollView; /** * Created by huqing on 2016/12/7. */ public class MyScrollView extends ScrollView { public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent ev) { Log.e("hq","child onTouch----------------"); switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_MOVE: if (getScrollY()==0){//ScrollView没有滑动时 ,即滑动高度没变化的话就允许父控件拦截 getParent().requestDisallowInterceptTouchEvent(false); }else {//禁止拦截 getParent().requestDisallowInterceptTouchEvent(true); } break; } return super.onTouchEvent(ev); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/activity_main" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg" tools:context="demo.hq.com.fby.MainActivity"> <demo.hq.com.fby.MyParentView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="100dp" android:text=" World!"/> <TextView android:layout_width="wrap_content" android:layout_height="100dp" android:text=" World!"/> <demo.hq.com.fby.MyScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="200dp" android:text="Hello World!"/> <TextView android:layout_width="wrap_content" android:layout_height="200dp" android:text="Hello World!"/> </LinearLayout> </demo.hq.com.fby.MyScrollView> </demo.hq.com.fby.MyParentView> </RelativeLayout>
以上所述是小编给大家介绍的Android 滑动拦截实例代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍vue axios请求拦截实例代码,包括了vue axios请求拦截实例代码的使用技巧和注意事项,需要的朋友参考一下 axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 http 请求 支持 Promise API 拦截请求和响应 转换请
本文向大家介绍vue+axios实现登录拦截的实例代码,包括了vue+axios实现登录拦截的实例代码的使用技巧和注意事项,需要的朋友参考一下 一个项目学会vue全家桶+axios实现登录、拦截、登出功能,以及利用axios的http拦截器拦截请求和响应。 前言 该项目是利用了Github 提供的personal token作为登录token,通过token访问你的Repository List。
本文向大家介绍Struts拦截器实现拦截未登陆用户实例解析,包括了Struts拦截器实现拦截未登陆用户实例解析的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Struts拦截器实现拦截未登陆用户,具体实现如下。 首先建立一个工具类: checkPrivilegeInterceptor:这个类继承interceptor,这是一个接口,要实现三个方法,要是觉得比较多的话,可以继承他的实现类A
本文向大家介绍解决拦截器对ajax请求的拦截实例详解,包括了解决拦截器对ajax请求的拦截实例详解的使用技巧和注意事项,需要的朋友参考一下 解决拦截器对ajax请求的的拦截 拦截器配置: 1、判断 String XRequested =request.getHeader("X-Requested-With") 的值,目的是判断是否是ajax请求。 2、response.getWriter().wr
本文向大家介绍SpringMVC中的拦截器详解及代码示例,包括了SpringMVC中的拦截器详解及代码示例的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是SpringMVC中的拦截器的介绍及实例代码,配置等内容,具体如下。 Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。本文主要总结一下springmvc中拦截器是如何定义
本文向大家介绍springboot aspect通过@annotation进行拦截的实例代码详解,包括了springboot aspect通过@annotation进行拦截的实例代码详解的使用技巧和注意事项,需要的朋友参考一下 annotation就是注解的意思,在我们使用的拦截器时,可以通过业务层添加的某个注解,对业务方法进行拦截,之前我们在进行统一方法拦截时使用的是execution,而注解的