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

Android 實現(xiàn)ViewPager邊界回彈效果實例代碼

 更新時間:2017年05月10日 10:09:53   作者:灬布衣丶公爵丨  
這篇文章主要介紹了Android 實現(xiàn)ViewPager邊界回彈效果的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

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

public class BounceBackViewPager extends ViewPager {
 private int currentPosition = 0;
 private Rect mRect = new Rect();//用來記錄初始位置
 private boolean handleDefault = true;
 private float preX = 0f;
 private static final float RATIO = 0.5f;//摩擦系數(shù)
 private static final float SCROLL_WIDTH = 10f;
 public BounceBackViewPager(Context context) {
  super(context);
 }
 public BounceBackViewPager(Context context, AttributeSet attrs) {
  super(context, attrs);
 }
 @Override
 public boolean dispatchKeyEvent(KeyEvent event) {
  return super.dispatchKeyEvent(event);
 }
 @Override
 public boolean onInterceptTouchEvent(MotionEvent ev) {
  if (ev.getAction() == MotionEvent.ACTION_DOWN) {
   preX = ev.getX();//記錄起點
   currentPosition = getCurrentItem();
  }
  return super.onInterceptTouchEvent(ev);
 }
 @Override
 public boolean onTouchEvent(MotionEvent ev) {
  switch (ev.getAction()) {
   case MotionEvent.ACTION_UP:
    onTouchActionUp();
    break;
   case MotionEvent.ACTION_MOVE:
    if (getAdapter().getCount() == 1) {
     float nowX = ev.getX();
     float offset = nowX - preX;
     preX = nowX;
     if (offset > SCROLL_WIDTH) {//手指滑動的距離大于設(shè)定值
      whetherConditionIsRight(offset);
     } else if (offset < -SCROLL_WIDTH) {
      whetherConditionIsRight(offset);
     } else if (!handleDefault) {//這種情況是已經(jīng)出現(xiàn)緩沖區(qū)域了,手指慢慢恢復(fù)的情況
      if (getLeft() + (int) (offset * RATIO) != mRect.left) {
       layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
      }
     }
    } else if ((currentPosition == 0 || currentPosition == getAdapter().getCount() - 1)) {
     float nowX = ev.getX();
     float offset = nowX - preX;
     preX = nowX;
     if (currentPosition == 0) {
      if (offset > SCROLL_WIDTH) {//手指滑動的距離大于設(shè)定值
       whetherConditionIsRight(offset);
      } else if (!handleDefault) {//這種情況是已經(jīng)出現(xiàn)緩沖區(qū)域了,手指慢慢恢復(fù)的情況
       if (getLeft() + (int) (offset * RATIO) >= mRect.left) {
        layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
       }
      }
     } else {
      if (offset < -SCROLL_WIDTH) {
       whetherConditionIsRight(offset);
      } else if (!handleDefault) {
       if (getRight() + (int) (offset * RATIO) <= mRect.right) {
        layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
       }
      }
     }
    } else {
     handleDefault = true;
    }
    if (!handleDefault) {
     return true;
    }
    break;
   default:
    break;
  }
  return super.onTouchEvent(ev);
 }
 private void whetherConditionIsRight(float offset) {
  if (mRect.isEmpty()) {
   mRect.set(getLeft(), getTop(), getRight(), getBottom());
  }
  handleDefault = false;
  layout(getLeft() + (int) (offset * RATIO), getTop(), getRight() + (int) (offset * RATIO), getBottom());
 }
 private void onTouchActionUp() {
  if (!mRect.isEmpty()) {
   recoveryPosition();
  }
 }
 private void recoveryPosition() {
  TranslateAnimation ta = new TranslateAnimation(getLeft(), mRect.left, 0, 0);
  ta.setDuration(300);
  startAnimation(ta);
  layout(mRect.left, mRect.top, mRect.right, mRect.bottom);
  mRect.setEmpty();
  handleDefault = true;
 }
}

以上所述是小編給大家介紹的Android 實現(xiàn)ViewPager邊界回彈效果實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android通過原生方式獲取經(jīng)緯度與城市信息的方法

    Android通過原生方式獲取經(jīng)緯度與城市信息的方法

    這篇文章主要給大家介紹了關(guān)于Android通過原生方式獲取經(jīng)緯度與城市信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Flutter將整個App變?yōu)榛疑暮唵螌崿F(xiàn)方法

    Flutter將整個App變?yōu)榛疑暮唵螌崿F(xiàn)方法

    Flutter?是?Google?開源的?UI?工具包,幫助開發(fā)者通過一套代碼庫高效構(gòu)建多平臺精美應(yīng)用,這篇文章主要給大家介紹了關(guān)于Flutter將整個App變?yōu)榛疑膶崿F(xiàn)方法,在Flutter中實現(xiàn)整個App變?yōu)榛疑欠浅:唵蔚?需要的朋友可以參考下
    2021-12-12
  • Android批量修改文件格式/文件名的神操作分享

    Android批量修改文件格式/文件名的神操作分享

    最近工作中遇到了一個功能,需要批量修改文件格式,發(fā)現(xiàn)實現(xiàn)的過程挺值得分享的,所以下面這篇文章主要給大家介紹了關(guān)于Android批量修改文件格式/文件名的神操作,需要的朋友可以參考下
    2021-09-09
  • PopupWindow仿微信浮層彈出框效果

    PopupWindow仿微信浮層彈出框效果

    這篇文章主要為大家詳細介紹了PopupWindow仿微信浮層彈出框效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android實現(xiàn)回彈ScrollView的原理

    Android實現(xiàn)回彈ScrollView的原理

    這篇文章主要為大家詳細介紹了Android實現(xiàn)回彈ScrollView的原理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 解析Android開發(fā)優(yōu)化之:對界面UI的優(yōu)化詳解(一)

    解析Android開發(fā)優(yōu)化之:對界面UI的優(yōu)化詳解(一)

    在Android應(yīng)用開發(fā)過程中,屏幕上控件的布局代碼和程序的邏輯代碼通常是分開的。界面的布局代碼是放在一個獨立的xml文件中的,這個文件里面是樹型組織的,控制著頁面的布局
    2013-05-05
  • Android 實現(xiàn)桌面未讀角標

    Android 實現(xiàn)桌面未讀角標

    本文主要介紹了Android實現(xiàn)桌面未讀角標的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Android AlertDialog的幾種用法詳解

    Android AlertDialog的幾種用法詳解

    這篇文章主要介紹了Android AlertDialog的幾種用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Android實現(xiàn)倒計時CountDownTimer使用詳解

    Android實現(xiàn)倒計時CountDownTimer使用詳解

    這篇文章主要為大家詳細介紹了Android實現(xiàn)倒計時CountDownTimer的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android項目實戰(zhàn)之ListView懸浮頭部展現(xiàn)效果實現(xiàn)

    Android項目實戰(zhàn)之ListView懸浮頭部展現(xiàn)效果實現(xiàn)

    這篇文章主要給大家介紹了Android項目實戰(zhàn)之ListView懸浮頭部展現(xiàn)效果實現(xiàn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01

最新評論

保康县| 南川市| 都兰县| 邻水| 景泰县| 博兴县| 县级市| 乌海市| 龙胜| 同德县| 德江县| 德安县| 临泉县| 德安县| 洪江市| 封丘县| 绩溪县| 常德市| 乌兰浩特市| 贞丰县| 岳普湖县| 濉溪县| 白水县| 乐安县| 钟祥市| 左贡县| 酉阳| 梅州市| 宁夏| 赤峰市| 买车| 永善县| 扶沟县| 得荣县| 奉贤区| 万安县| 宽城| 迁西县| 长垣县| 辽中县| 九台市|