国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 滑動攔截實例代碼解析

2019-12-12 04:23:37
字體:
來源:轉載
供稿:網友

廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:

 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 滑動攔截實例代碼解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荣成市| 包头市| 抚州市| 兴和县| 米易县| 隆回县| 红河县| 临潭县| 东光县| 武城县| 五常市| 荆州市| 谢通门县| 博白县| 桑日县| 洪雅县| 桂林市| 云龙县| 应用必备| 女性| 厦门市| 茂名市| 凤凰县| 庐江县| 财经| 增城市| 肥乡县| 宣城市| 安溪县| 昆山市| 军事| 颍上县| 昌图县| 西青区| 九龙城区| 乌兰浩特市| 康定县| 盘山县| 米林县| 溆浦县| 翁牛特旗|