欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)左滑退出Activity的完美封裝

 更新時間:2020年12月15日 09:56:14   作者:代碼君哈哈  
這篇文章主要介紹了Android實現(xiàn)左滑退出Activity的完美封裝,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1:定義一個自己的父級容器,讓它繼承自一個布局(LinearLayout、RelativeLayout都可以)

public class SildingFinishLayout extends RelativeLayout implements View.OnTouchListener {
  /**
   * SildingFinishLayout布局的父布局
   */
  private ViewGroup mParentView;
  /**
   * 處理滑動邏輯的View
   */
  private View touchView;
  /**
   * 滑動的最小距離
   */
  private int mTouchSlop;
  /**
   * 按下點的X坐標
   */
  private int downX;
  /**
   * 按下點的Y坐標
   */
  private int downY;
  /**
   * 臨時存儲X坐標
   */
  private int tempX;
  /**
   * 滑動類
   */
  private Scroller mScroller;
  /**
   * SildingFinishLayout的寬度
   */
  private int viewWidth;
  /**
   * 記錄是否正在滑動
   */
  private boolean isSilding;


  private OnSildingFinishListener onSildingFinishListener;
  private boolean isFinish;


  public SildingFinishLayout(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }


  public SildingFinishLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);


    mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    mScroller = new Scroller(context);
  }


  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);
    if (changed) {
// 獲取SildingFinishLayout所在布局的父布局
      mParentView = (ViewGroup) this.getParent();
      viewWidth = this.getWidth();
    }
  }


  /**
   * 設置OnSildingFinishListener, 在onSildingFinish()方法中finish Activity
   *
   * @param onSildingFinishListener
   */
  public void setOnSildingFinishListener(
      OnSildingFinishListener onSildingFinishListener) {
    this.onSildingFinishListener = onSildingFinishListener;
  }


  /**
   * 設置Touch的View
   *
   * @param touchView
   */
  public void setTouchView(View touchView) {
    this.touchView = touchView;
    touchView.setOnTouchListener(this);
  }


  public View getTouchView() {
    return touchView;
  }


  /**
   * 滾動出界面
   */
  private void scrollRight() {
    final int delta = (viewWidth + mParentView.getScrollX());
// 調(diào)用startScroll方法來設置一些滾動的參數(shù),我們在computeScroll()方法中調(diào)用scrollTo來滾動item
    mScroller.startScroll(mParentView.getScrollX(), 0, -delta + 1, 0,
        Math.abs(delta));
    postInvalidate();
  }


  /**
   * 滾動到起始位置
   */
  private void scrollOrigin() {
    int delta = mParentView.getScrollX();
    mScroller.startScroll(mParentView.getScrollX(), 0, -delta, 0,
        Math.abs(delta));
    postInvalidate();
  }


  /**
   * touch的View是否是AbsListView, 例如ListView, GridView等其子類
   *
   * @return
   */
  private boolean isTouchOnAbsListView() {
    return touchView instanceof AbsListView ? true : false;
  }


  /**
   * touch的view是否是ScrollView或者其子類
   *
   * @return
   */
  private boolean isTouchOnScrollView() {
    return touchView instanceof ScrollView ? true : false;
  }


  @Override
  public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        downX = tempX = (int) event.getRawX();
        downY = (int) event.getRawY();
        break;
      case MotionEvent.ACTION_MOVE:
        int moveX = (int) event.getRawX();
        int deltaX = tempX - moveX;
        tempX = moveX;
        if (Math.abs(moveX - downX) > mTouchSlop
            && Math.abs((int) event.getRawY() - downY) < mTouchSlop) {
          isSilding = true;


// 若touchView是AbsListView,
// 則當手指滑動,取消item的點擊事件,不然我們滑動也伴隨著item點擊事件的發(fā)生
          if (isTouchOnAbsListView()) {
            MotionEvent cancelEvent = MotionEvent.obtain(event);
            cancelEvent
                .setAction(MotionEvent.ACTION_CANCEL
                    | (event.getActionIndex() << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
            v.onTouchEvent(cancelEvent);
          }


        }


        if (moveX - downX >= 0 && isSilding) {
          mParentView.scrollBy(deltaX, 0);


// 屏蔽在滑動過程中ListView ScrollView等自己的滑動事件
          if (isTouchOnScrollView() || isTouchOnAbsListView()) {
            return true;
          }
        }
        break;
      case MotionEvent.ACTION_UP:
        isSilding = false;
        if (mParentView.getScrollX() <= -viewWidth / 2) {
          isFinish = true;
          scrollRight();
        } else {
          scrollOrigin();
          isFinish = false;
        }
        break;
    }


// 假如touch的view是AbsListView或者ScrollView 我們處理完上面自己的邏輯之后
// 再交給AbsListView, ScrollView自己處理其自己的邏輯
    if (isTouchOnScrollView() || isTouchOnAbsListView()) {
      return v.onTouchEvent(event);
    }


// 其他的情況直接返回true
    return true;
  }


  @Override
  public void computeScroll() {
// 調(diào)用startScroll的時候scroller.computeScrollOffset()返回true,
    if (mScroller.computeScrollOffset()) {
      mParentView.scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
      postInvalidate();


      if (mScroller.isFinished()) {


        if (onSildingFinishListener != null && isFinish) {
          onSildingFinishListener.onSildingFinish();
        }
      }
    }
  }

  public interface OnSildingFinishListener {
    public void onSildingFinish();
  }
}

2.Acitity

在Activity的onCreate()方法里面  

 @Override
  public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
    SildingFinishLayout mSildingFinishLayout = (SildingFinishLayout) findViewById(R.id.timed_task_SildingFinishLayout);
mSildingFinishLayout
    mSildingFinishLayout .setOnSildingFinishListener(new SildingFinishLayout.OnSildingFinishListener() {
      @Override
      public void onSildingFinish() {
        finish();
      }
    });
    mSildingFinishLayout .setTouchView(mSildingFinishLayout);//綁定底層的布局就可以了 :不起作用的話換個你activity 布局里面view就可以啦 
  }

截止目前,這個功能已經(jīng)實現(xiàn)了

解決問題:這個會出現(xiàn)左滑 背景白色問題

1.style.xml中中增加

<style name="AppTheme" parent="android:Theme.Light">
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowBackground">@android:color/transparent</item>
</style>

2 acvitiy 的屬性中加上

android:theme="@style/AppTheme" 

3 一些屬性的詳解

<item name="android:windowFrame">@null</item> :Dialog的windowFrame框為無
<item name="android:windowIsFloating">true</item>:是否浮現(xiàn)在activity之上
<item name="android:windowIsTranslucent">false</item>:是否半透明
<item name="android:windowNoTitle">true</item>:是否顯示title
<item name="android:windowBackground">@drawable/dia_bg</item>:設置dialog的背景
<item name="android:backgroundDimEnabled">false</item>: 背景是否透明顯示

到此這篇關(guān)于Android實現(xiàn)左滑退出Activity的完美封裝的文章就介紹到這了,更多相關(guān)Android 左滑退出Activity內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android如何禁止向EditText控件中輸入內(nèi)容詳解

    Android如何禁止向EditText控件中輸入內(nèi)容詳解

    EditText是接受用戶輸入信息的最重要控件。下面這篇文章主要給大家介紹了關(guān)于Android如何禁止向EditText控件中輸入內(nèi)容的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Android實現(xiàn)調(diào)用攝像頭進行拍照功能

    Android實現(xiàn)調(diào)用攝像頭進行拍照功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)調(diào)用攝像頭進行拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android ProgressDialog進度條使用詳解

    Android ProgressDialog進度條使用詳解

    這篇文章主要對Android開發(fā)之ProgressDialog讀取文件進度進行解析,感興趣的朋友可以參考一下
    2016-02-02
  • Android編程實現(xiàn)壓縮圖片并加載顯示的方法

    Android編程實現(xiàn)壓縮圖片并加載顯示的方法

    這篇文章主要介紹了Android編程實現(xiàn)壓縮圖片并加載顯示的方法,涉及Android開發(fā)中圖片的運算、壓縮處理操作及界面布局顯示壓縮圖片等相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Android完全退出應用程序的方法

    Android完全退出應用程序的方法

    這篇文章主要介紹了Android完全退出應用程序的方法,實例分析了Android退出應用程序的相關(guān)方法與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android 渲染機制深入理解

    Android 渲染機制深入理解

    這篇文章主要介紹了Android 渲染機制深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 詳解Flutter中的數(shù)據(jù)傳遞

    詳解Flutter中的數(shù)據(jù)傳遞

    這篇文章主要介紹了Flutter中的數(shù)據(jù)傳遞的相關(guān)資料,幫助大家更好的理解和學習使用Flutter,感興趣的朋友可以了解下
    2021-04-04
  • android開發(fā)權(quán)限詢問的示例代碼

    android開發(fā)權(quán)限詢問的示例代碼

    這篇文章主要介紹了android開發(fā)權(quán)限詢問的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android中使用itemdecoration實現(xiàn)時間線效果

    Android中使用itemdecoration實現(xiàn)時間線效果

    這篇文章主要介紹了Android中使用itemdecoration實現(xiàn)時間線效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Android自定義控件下拉刷新實例代碼

    Android自定義控件下拉刷新實例代碼

    這篇文章主要介紹了Android自定義控件下拉刷新實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論