Android仿抖音上下滑動布局
更新時間:2019年12月18日 09:39:42 作者:X大大
這篇文章主要為大家詳細介紹了Android仿抖音上下滑動布局,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
抖音上下滑動,監(jiān)聽播放,自動吸頂,吸底效果,供大家參考,具體內(nèi)容如下
使用RecyclerView+PagerSnapHelper實現(xiàn)
public class DouYinLayoutManager extends LinearLayoutManager implements RecyclerView.OnChildAttachStateChangeListener{ //判斷是否上滑還是下滑 private int mDrift; private OnViewPagerListener onViewPagerListener; //吸頂,吸底 private PagerSnapHelper pagerSnapHelper; public OnViewPagerListener getOnViewPagerListener() { return onViewPagerListener; } public void setOnViewPagerListener(OnViewPagerListener onViewPagerListener) { this.onViewPagerListener = onViewPagerListener; } public DouYinLayoutManager(Context context) { super(context); } public DouYinLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); pagerSnapHelper = new PagerSnapHelper(); } /** * 當manager完全添加到recycleview中是會被調(diào)用 * @param view */ @Override public void onAttachedToWindow(RecyclerView view) { view.addOnChildAttachStateChangeListener(this); pagerSnapHelper.attachToRecyclerView(view); super.onAttachedToWindow(view); } @Override public boolean canScrollVertically() { return super.canScrollVertically(); } @Override public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) { mDrift = dy; return super.scrollVerticallyBy(dy, recycler, state); } @Override public void onChildViewAttachedToWindow(@NonNull View view) { if (mDrift > 0){ //向上滑 if (onViewPagerListener != null && Math.abs(mDrift) == view.getHeight()){ onViewPagerListener.onPageSelected(false,view); } }else { //向下滑 if (onViewPagerListener != null && Math.abs(mDrift) == view.getHeight()){ onViewPagerListener.onPageSelected(true,view); } } } @Override public void onChildViewDetachedFromWindow(@NonNull View view) { if (mDrift >= 0){ //向上滑 if (onViewPagerListener != null){ onViewPagerListener.onPageRelease(true,view); } }else { //向下滑 if (onViewPagerListener != null){ onViewPagerListener.onPageRelease(false,view); } } } @Override public void onScrollStateChanged(int state) { switch (state){ case RecyclerView.SCROLL_STATE_IDLE: //當前顯示的item View snapView = pagerSnapHelper.findSnapView(this); if (onViewPagerListener != null){ onViewPagerListener.onPageSelected(false,snapView); } break; } super.onScrollStateChanged(state); } }
recyclerView.setLayoutManager()即可
recyclerView = findViewById(R.id.recyclerView_dy); douYinLayoutManager = new DouYinLayoutManager(this, OrientationHelper.VERTICAL,false); recyclerView.setLayoutManager(douYinLayoutManager); recyclerView.setAdapter(new MyAdapter()); douYinLayoutManager.setOnViewPagerListener(new OnViewPagerListener() { @Override public void onPageRelease(boolean isNest, View position) { releaseVideo(position); } @Override public void onPageSelected(boolean isButten, View position) { playVideo(position); } }); }
代碼:MyUiDemo
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android Compose實現(xiàn)聯(lián)系人列表流程
聲明式UI,更簡單的自定義,實時帶交互的預覽功能Compose并不是類似于Recyclerview的高級控件,而是直接拋棄了View,ViewGroup那套東西,從上到下魯了一套全新的框架,直白點說就是它的渲染機制,布局機制,觸摸算法,以及UI具體寫法全都是新的2023-03-03Android?SeekBar充當Progress實現(xiàn)兔兔進度條Plus
這篇文章主要為大家介紹了Android?SeekBar充當Progress實現(xiàn)兔兔進度條Plus示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02Android Secret Code(輸入字符彈出手機信息)詳解
這篇文章主要介紹了Android Secret Code(輸入字符彈出手機信息)詳解的相關資料,需要的朋友可以參考下2016-11-11