Android仿抖音上下滑動布局
抖音上下滑動,監(jiān)聽播放,自動吸頂,吸底效果,供大家參考,具體內(nèi)容如下
使用RecyclerView+PagerSnapHelper實(shí)現(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();
}
/**
* 當(dāng)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:
//當(dāng)前顯示的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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android使用Textview實(shí)現(xiàn)伸縮效果
這篇文章主要為大家詳細(xì)介紹了android使用Textview實(shí)現(xiàn)伸縮效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
Android Compose實(shí)現(xiàn)聯(lián)系人列表流程
聲明式UI,更簡單的自定義,實(shí)時帶交互的預(yù)覽功能Compose并不是類似于Recyclerview的高級控件,而是直接拋棄了View,ViewGroup那套東西,從上到下魯了一套全新的框架,直白點(diǎn)說就是它的渲染機(jī)制,布局機(jī)制,觸摸算法,以及UI具體寫法全都是新的2023-03-03
Android實(shí)現(xiàn)發(fā)送短信功能實(shí)例詳解
這篇文章主要介紹了Android實(shí)現(xiàn)發(fā)送短信功能的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android實(shí)現(xiàn)發(fā)送短信的原理、步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-02-02
Android?SeekBar充當(dāng)Progress實(shí)現(xiàn)兔兔進(jìn)度條Plus
這篇文章主要為大家介紹了Android?SeekBar充當(dāng)Progress實(shí)現(xiàn)兔兔進(jìn)度條Plus示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Android Secret Code(輸入字符彈出手機(jī)信息)詳解
這篇文章主要介紹了Android Secret Code(輸入字符彈出手機(jī)信息)詳解的相關(guān)資料,需要的朋友可以參考下2016-11-11

