国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2019-10-21 21:46:44
字體:
來源:轉載
供稿:網友

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

重寫LinearLayoutManager,在onAttachedToWindow方法中使用 PagerSnapHelper設置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)//設置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)      }    }  }  /**   * 布局完成后調用   * @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)  }  /**   * 設置監(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條目內容主布局滿屏填充

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 汕尾市| 沂南县| 新源县| 泰兴市| 德兴市| 曲阳县| 平顺县| 昭通市| 出国| 招远市| 商南县| 金阳县| 哈密市| 辽中县| 阿拉善左旗| 本溪| 嘉峪关市| 水城县| 广东省| 新竹县| 盱眙县| 泾阳县| 苗栗市| 西贡区| 宁波市| 鹤岗市| 兴海县| 嵩明县| 襄垣县| 武威市| 鄂托克前旗| 天台县| 东平县| 仁寿县| 镇江市| 临颍县| 泰安市| 平阳县| 苍溪县| 敦化市| 綦江县|