0
点赞
收藏
分享

微信扫一扫

用RecyclerView打造一个轮播图

认真的老去 2022-04-15 阅读 43

至于自动滑动图片,就用Handler不断延迟发送消息就好了:

private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg. Android开源项目《ali1024.coding.net/public/P7/Android/git》 what == WHAT_AUTO_PLAY) {
mRecyclerView.smoothScrollToPosition(++currentIndex);
refreshIndicator();
mHandler.sendEmptyMessageDelayed(WHAT_AUTO_PLAY, autoPlayDuration);

}
return false;
}
});

好了,无限轮播解决了,接下来就是标示点了,既然无限轮播图都用RecyclerView解决了,那么标示点也用它来解决吧:

private class IndicatorAdapter extends RecyclerView.Adapter {

int currentPosition = 0;

public void setPosition(int currentPosition) {
this.currentPosition = currentPosition;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new RecyclerView.ViewHolder(new ImageView(getContext())) {
};
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder ho 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》开源 lder, int position) {
ImageView bannerPoint = (ImageView) holder.itemView;
bannerPoint.setImageDrawable(currentPosition == position ? mSelectedDrawable : mUnselectedDrawable);

}

@Override
public int getItemCount() {
return bannerSize;
}
}

其实Adapter也很简单,设置一个当前位置的标识点,然后在图片改变的时候notifyDataSetChanged()就行了。
好了最后就剩下怎么监听RecyclerView的位置改变了(可没有像Viewpager的addOnPageChangeListener那么直接的方法),没办法直接分析RecyclerView.OnScrollListener中的回调方法吧:

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//解决连续滑动时指示器不更新的问题
if (bannerSize < 2) return;
int firstReal = mLinearLayoutManager.findFirstVisibleItemPosition();
View viewFirst = mLinearLayoutManager.findViewByPosition(firstReal);
float width = getWidth();
if (width != 0 && viewFirst != null) {
float right = viewFirst.getRight();
float ratio = right / width;
if (ratio > 0.8) {
if (currentIndex != firstReal) {
currentIndex = firstReal;
refreshIndicator();
}
} else if (ratio < 0.2) {
if (currentIndex != firstReal + 1) {

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能
  • 面试技巧+面试题

    8cG8sH-1650020298683)]
  • 面试技巧+面试题
    [外链图片转存中…(img-eQXmok1O-1650020298684)]
举报

相关推荐

0 条评论