博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
轮播图记录篇
阅读量:5216 次
发布时间:2019-06-14

本文共 4860 字,大约阅读时间需要 16 分钟。

 

RecyclerView做的一个轮播效果,适配器有视图缓存,避免了一些内存问题

首先是借助 PagerSnapHelper 让RecyclerView每次只滑动一个,然后添加一个指示器,这里指示器是动态生成的,自己做了个简单的view

很简单的一个效果,直接上代码

public class ImageListAdapter extends BaseQuickAdapter
{ private CallBack callBack; public ImageListAdapter(int layoutResId,CallBack callBack) { super(layoutResId); this.callBack = callBack; } @Override protected void convert(BaseViewHolder helper, String item) { if (item != null && !item.isEmpty()){ MyPhotoView img =helper.getView(R.id.img_icon); GlideApp.with(AndroidApplication.getInstance().getApplicationContext()) .load(item) .skipMemoryCache(true) .fitCenter() .into(img); img.setOnPhotoTapListener((view, x, y) -> callBack.click()); } } public interface CallBack{ void click(); }}
View Code
@Override    protected void initData() {        Bundle bundle = getArguments();        ArrayList
list = bundle.getStringArrayList("Photo"); int position = bundle.getInt("Photo_p", 0); adapter = new ImageListAdapter(R.layout.item_imagelist, new ImageListAdapter.CallBack() { @Override public void click() { if (getActivity() != null) { getActivity().finish(); } } }); adapter.addData(list); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false); recyclerView.setLayoutManager(linearLayoutManager); linearLayoutManager.scrollToPositionWithOffset(position, 0); linearLayoutManager.setStackFromEnd(true); recyclerView.setAdapter(adapter); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE && lin_indicate != null) {
//不滑动的时候,避免多次触发 int lastItemPosition = linearLayoutManager.findLastCompletelyVisibleItemPosition(); lin_indicate.setIndicatePosition(lastItemPosition); } } }); new PagerSnapHelper().attachToRecyclerView(recyclerView); int count = list.size(); lin_indicate.load(count,position); adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { if (getActivity() != null) { getActivity().finish(); } } }); }
View Code
public class LinIndicate extends LinearLayout {    public LinIndicate(Context context) {        super(context);    }    public LinIndicate(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);    }    public LinIndicate(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    public void load(int count){        removeAllViews();        for (int i = 0; i < count; i++) {            ImageView imageView = new ImageView(getContext());            ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);            imageView.setLayoutParams(params);            imageView.setPadding(10,10,10,20);            addView(imageView);        }    }    /**     * @param count 指示器数量     * @param position 默认显示下标     */    public void load(int count,int position){        removeAllViews();        for (int i = 0; i < count; i++) {            ImageView imageView = new ImageView(getContext());            ViewGroup.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);            imageView.setLayoutParams(params);            imageView.setPadding(10,10,10,20);            addView(imageView);        }        setIndicatePosition(position);    }    public void setIndicatePosition(int position){        int count = getChildCount();        if (position > count)            return;        for (int i = 0; i < count; i++) {            ImageView imageView = (ImageView) getChildAt(i);            if (position == i){                imageView.setImageResource(R.mipmap.ic_page_indicator_focused);            }else{                imageView.setImageResource(R.mipmap.ic_page_indicator);            }        }    }}
View Code

虽然简单,但是也记录一下,说不定哪天就能帮上忙呢,有的时候遇到很多问题解决过但是想不起来,可是当你看到相关联的一些代码,或许记忆片段就来了

 

转载于:https://www.cnblogs.com/LiuZhen/p/7851140.html

你可能感兴趣的文章
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>
2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
查看>>
NPM慢怎么办 - nrm切换资源镜像
查看>>
CoreData 从入门到精通(四)并发操作
查看>>
Swift - UIView的常用属性和常用方法总结
查看>>
Swift - 异步加载各网站的favicon图标,并在单元格中显示
查看>>
Java编程思想总结笔记Chapter 5
查看>>
[LeetCode]662. Maximum Width of Binary Tree判断树的宽度
查看>>
WinForm聊天室
查看>>
【Python学习笔记】1.基础知识
查看>>
梦断代码阅读笔记02
查看>>
selenium学习中遇到的问题
查看>>
大数据学习之一——了解简单概念
查看>>
Linux升级内核教程(CentOS7)
查看>>
Lintcode: Partition Array
查看>>
分享适合个人站长的5类型网站
查看>>