废话不多说了,直接给大家贴代码了,具体代码如下所示:
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=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); } }
<&#63;xml version="1.0" encoding="utf-8"&#63;>
以上所述是小编给大家介绍的Android 滑动拦截实例代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!