最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 滑動(dòng)攔截實(shí)例代碼解析

 更新時(shí)間:2016年12月09日 09:53:21   作者:蘋果樹(shù)上的女孩  
本文給大家分享一段實(shí)例代碼解析android 滑動(dòng)攔截功能的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下

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

 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.
 * 思路:
 * 分內(nèi)外部攔截
 * 在父布局中,onInterceptTouchEvent先判斷是否攔截滑動(dòng),true 攔截 直接進(jìn)入父布局的onTouch方法 ;false 進(jìn)入子布局的onTouch方法
 */
public class MyParentView extends LinearLayout
{
  /**
   * 每向下Move移動(dòng)的距離
   */
  private int mMove;
  /**
   * 落下點(diǎn)的位置
   */
  private int yDown;
  /**
   * 移動(dòng)點(diǎn)的位置
   */
  private int yMove;
  /**
   * 一共向下挪動(dòng)的距離
   */
  private int downDistance = 0;
  public MyParentView(Context context, AttributeSet attrs)
  {
    super(context, attrs);
  }
  boolean intercept = false;
  /**
   * 外部攔截,
   * 如果是向下滑動(dòng) 則為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 攔截,進(jìn)入該控件的onTouchEvent方法 false:進(jìn)入子控件的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沒(méi)有滑動(dòng)時(shí) ,即滑動(dòng)高度沒(méi)變化的話就允許父控件攔截
          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 滑動(dòng)攔截實(shí)例代碼解析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

麟游县| 台中县| 包头市| 大名县| 景德镇市| 高碑店市| 辽阳市| 中江县| 宁明县| 茶陵县| 巢湖市| 兴文县| 襄城县| 云和县| 来凤县| 富阳市| 平安县| 上林县| 阳高县| 临沧市| 潮安县| 湖州市| 武威市| 云浮市| 灵寿县| 醴陵市| 辰溪县| 东兰县| 新民市| 屏山县| 池州市| 阿克苏市| 小金县| 朝阳县| 昌都县| 永仁县| 闻喜县| 海原县| 建昌县| 乌鲁木齐县| 修水县|