亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

RecyclerView實現(xiàn)抖音縱向滾動ViewPager效果

 更新時間:2018年07月17日 09:56:07   作者:TomCat0916  
這篇文章主要為大家詳細介紹了RecyclerView實現(xiàn)抖音縱向滾動ViewPager效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

使用RecyclerView實現(xiàn)抖音縱向滾動ViewPager效果,供大家參考,具體內(nèi)容如下

重寫LinearLayoutManager,在onAttachedToWindow方法中使用 PagerSnapHelper設(shè)置RecyclerView條目加載方式為每次滾動加載一頁

class MyLinearLayoutManager : LinearLayoutManager {

  private lateinit var mPagerSnapHelper: PagerSnapHelper
  private var mOnViewPagerListener: OnViewPagerListener? = null
  private lateinit var mRecyclerView: RecyclerView
  private var mDrift: Int = 0//位移,用來判斷移動方向

  constructor(context: Context) : this(context, OrientationHelper.VERTICAL)
  constructor(context: Context, orientation: Int) : this(context, orientation, false)
  constructor(context: Context, orientation: Int, reverseLayout: Boolean) : super(context, orientation, reverseLayout) {
    mPagerSnapHelper = PagerSnapHelper()
  }

  override fun onAttachedToWindow(view: RecyclerView) {
    super.onAttachedToWindow(view)
    mPagerSnapHelper.attachToRecyclerView(view)//設(shè)置RecyclerView每次滾動一頁
    mRecyclerView = view
    mRecyclerView.addOnChildAttachStateChangeListener(mChildAttachStateChangeListener)
  }


  /**
   * 滑動狀態(tài)的改變
   * 緩慢拖拽-> SCROLL_STATE_DRAGGING
   * 快速滾動-> SCROLL_STATE_SETTLING
   * 空閑狀態(tài)-> SCROLL_STATE_IDLE
   * @param state
   */
  override fun onScrollStateChanged(state: Int) {
    if (state == RecyclerView.SCROLL_STATE_IDLE){
      val viewIdle = mPagerSnapHelper.findSnapView(this)
      val positionIdle = getPosition(viewIdle!!)
      if (mOnViewPagerListener != null && childCount == 1) {
        mOnViewPagerListener!!.onPageSelected(positionIdle, positionIdle == itemCount - 1)
      }
    }
  }

  /**
   * 布局完成后調(diào)用
   * @param state
   */
  override fun onLayoutCompleted(state: RecyclerView.State?) {
    super.onLayoutCompleted(state)
    if (mOnViewPagerListener != null) mOnViewPagerListener!!.onLayoutComplete()
  }

  /**
   * 監(jiān)聽豎直方向的相對偏移量
   */
  override fun scrollVerticallyBy(dy: Int, recycler: RecyclerView.Recycler?, state: RecyclerView.State?): Int {
    this.mDrift = dy
    return super.scrollVerticallyBy(dy, recycler, state)
  }


  /**
   * 監(jiān)聽水平方向的相對偏移量
   */
  override fun scrollHorizontallyBy(dx: Int, recycler: RecyclerView.Recycler?, state: RecyclerView.State?): Int {
    this.mDrift = dx
    return super.scrollHorizontallyBy(dx, recycler, state)
  }

  /**
   * 設(shè)置監(jiān)聽
   * @param listener
   */
  fun setOnViewPagerListener(listener: OnViewPagerListener) {
    this.mOnViewPagerListener = listener
  }

  private val mChildAttachStateChangeListener = object : RecyclerView.OnChildAttachStateChangeListener {
    override fun onChildViewAttachedToWindow(view: View) {
    }

    override fun onChildViewDetachedFromWindow(view: View) {
      if (mDrift >= 0) {
        if (mOnViewPagerListener != null) mOnViewPagerListener!!.onPageRelease(true, getPosition(view))
      } else {
        if (mOnViewPagerListener != null) mOnViewPagerListener!!.onPageRelease(false, getPosition(view))
      }

    }
  }

  interface OnViewPagerListener{
    /*釋放的監(jiān)聽*/
    fun onPageRelease(isNext: Boolean, position: Int)

    /*選中的監(jiān)聽以及判斷是否滑動到底部*/
    fun onPageSelected(position: Int, isBottom: Boolean)

    /*布局完成的監(jiān)聽*/
    fun onLayoutComplete()
  }
}

重寫RecyclerView條目內(nèi)容主布局滿屏填充

class MyImageView : ImageView {
  constructor(context: Context) : this(context, null!!)
  constructor(context: Context, attr: AttributeSet) : this(context, attr, 0)
  constructor(context: Context, attr: AttributeSet, defStyleAttr: Int) : super(context, attr, defStyleAttr)

  override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    val width = View.getDefaultSize(0, widthMeasureSpec)
    val height = View.getDefaultSize(0, heightMeasureSpec)
    setMeasuredDimension(width, height)
  }

}

代碼參考:LayoutManagerGroup

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android消息個數(shù)提醒控件使用詳解

    Android消息個數(shù)提醒控件使用詳解

    這篇文章主要為大家詳細介紹了Android消息個數(shù)提醒控件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • android實現(xiàn)簡單儀表盤效果

    android實現(xiàn)簡單儀表盤效果

    這篇文章主要為大家詳細介紹了android實現(xiàn)簡單儀表盤效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 解析:ClickOnce通過URL傳遞參數(shù) XXX.application?a=1

    解析:ClickOnce通過URL傳遞參數(shù) XXX.application?a=1

    本篇文章是對ClickOnce通過URL傳遞參數(shù)進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Android 環(huán)境變量的配置方法

    Android 環(huán)境變量的配置方法

    本文主要介紹Android 環(huán)境變量的配置方法,這里詳細講解了如何實現(xiàn)環(huán)境變量的配置方法,有興趣的小伙伴可以參考下
    2016-09-09
  • Android字體相關(guān)知識總結(jié)

    Android字體相關(guān)知識總結(jié)

    最近接到一個需求,大致內(nèi)容是:全局替換當前項目中的默認字體,并引入 UI 設(shè)計師提供的一些新字體。于是對字體做了些研究,把自己的一些心得分享給大家。注意:本文所展示的系統(tǒng)源碼都是基于Android-30 ,并提取核心部分進行分析
    2021-06-06
  • Android OpenGL仿自如APP裸眼3D效果詳解

    Android OpenGL仿自如APP裸眼3D效果詳解

    之前自如團隊發(fā)布了一個自如客APP裸眼3D效果的實現(xiàn)。本文將通過Android OpenGL實現(xiàn)這一裸眼3D效果,文中的示例代碼講解詳細,感興趣的可以學習一下
    2022-01-01
  • Android 掃描附近的藍牙設(shè)備并連接藍牙音響的示例

    Android 掃描附近的藍牙設(shè)備并連接藍牙音響的示例

    本篇文章主要介紹了Android 掃描附近的藍牙設(shè)備并連接藍牙音響的示例,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解

    Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解

    這篇文章主要介紹了Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Android實現(xiàn)商品展示效果

    Android實現(xiàn)商品展示效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)商品展示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Kotlin原理詳析之拓展函數(shù)

    Kotlin原理詳析之拓展函數(shù)

    kotlin中的擴展函數(shù),實際上是在自己的類中添加了一個static final方法,將需要擴展的類,在使用的時候作為第一個參數(shù)傳入方法中,然后使用,這篇文章主要給大家介紹了關(guān)于Kotlin原理詳析之拓展函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01

最新評論