溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Android中自定義ViewPager實(shí)現(xiàn)縱向滑動翻頁效果

發(fā)布時間:2021-06-04 17:02:34 來源:億速云 閱讀:251 作者:Leah 欄目:移動開發(fā)

怎么在Android中自定義ViewPager實(shí)現(xiàn)縱向滑動翻頁效果?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

public class VerticalViewPager extends ViewPager {
  public VerticalViewPager(Context context) {
    super(context);
  }
 
  public VerticalViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
 
  @Override
  public boolean onTouchEvent(MotionEvent ev) {
    return super.onTouchEvent(swapTouchEvent(MotionEvent.obtain(ev)));
  }
 
  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {
    return super.onInterceptTouchEvent(swapTouchEvent(MotionEvent.obtain(ev)));
  }
 
  private MotionEvent swapTouchEvent(MotionEvent event) {
    float width = getWidth();
    float height = getHeight();
    event.setLocation((event.getY() / height) * width, ((event.getX() / width) * height));
    return event;
  }
}

首先,我們自定義一個繼承ViewPager的類,我們重點(diǎn)關(guān)注一下swapTouchEvent()方法。這個方法是將MotionEvent事件的x坐標(biāo)換成y坐標(biāo),而y坐標(biāo)換成x坐標(biāo)。當(dāng)然,這個是參考百度的,我們理解了就好。其實(shí)現(xiàn)實(shí)在妙不可言!

public class VerticalPageTransformer implements ViewPager.PageTransformer {
  @Override
  public void transformPage(View view, float position) {
    /**
     * 0 當(dāng)前界面
     * -1 前一頁
     * 1 后一頁
     */
    if (position >= -1 && position <= 1) {
      view.setTranslationX(view.getWidth() * -position);
      float yPosition = position * view.getHeight();
      view.setTranslationY(yPosition);
    }
  }
}

上部分代碼,實(shí)現(xiàn)了界面由原來的橫向平移到縱向平移的過程。其思路是這樣的,我畫了一個草圖(湊合看,畢竟連幼兒園都沒畢業(yè),畫畫功底~~)

怎么在Android中自定義ViewPager實(shí)現(xiàn)縱向滑動翻頁效果

這張圖描述了我們手機(jī)的屏幕,我們知道ViewPager,默認(rèn)是把三個界面橫向著排一起的,現(xiàn)在我們將其改為縱向的。
如果手指向下滑動,也就是第一個界面(綠色的),它將會進(jìn)入到我們的屏幕,然而當(dāng)前頁(紅色的)將退出屏幕,這是一套完整的流程,手指向上滑動,則方向相反。

view.setTranslationX(view.getWidth() * -position);
 float yPosition = position * view.getHeight();
 view.setTranslationY(yPosition);

看完上述內(nèi)容,你們掌握怎么在Android中自定義ViewPager實(shí)現(xiàn)縱向滑動翻頁效果的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI