1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android RecyclerView实现图片自适应高度的瀑布流

Android RecyclerView实现图片自适应高度的瀑布流

时间:2020-03-18 06:53:03

相关推荐

Android RecyclerView实现图片自适应高度的瀑布流

项目中要实现图片自适应高度的瀑布流,咋样自适应高度呢?

1.item的高度宽度要wrap_content

2.获得图片的高度宽度

3.onBindViewHolder中绑定数据的时候,先获取item宽度,计算图片等比例缩放后的高度,为imageView设置参数

关键代码如下:

mRecyclerView = findViewById(R.id.recyclerview);mRecyclerView.setPadding(8,8,8,8);mRecyclerView.addItemDecoration(new SpacesItemDecoration(8));layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);mRecyclerView.setLayoutManager(layoutManager);imageAdapter = new ImageAdapter(context,mData);mRecyclerView.setAdapter(imageAdapter);

public void onBindViewHolder(ImageViewHolder holder, int position) {final ImageData data = mData.get(position);//获取item宽度,计算图片等比例缩放后的高度,为imageView设置参数ViewGroup.LayoutParams layoutParams = holder.imageView.getLayoutParams();float itemWidth = (ScreenUtils.getScreenWidth(context) - 16*3) / 2;layoutParams.width = (int) itemWidth;float scale = (itemWidth+0f)/data.getWidth();layoutParams.height= (int) (data.getHeight()*scale);holder.imageView.setLayoutParams(layoutParams);Glide.with(context).load(data.getResourceId()).override(layoutParams.width, layoutParams.height).into(holder.imageView);}

itemView的宽度 = (屏幕的宽度-三个间隔(每个间隔是16))/ 2

效果图:

做了一个Demo,Demo中的图片都是放在drawable中的,不是url.

Demo地址:/download/vida990717/11058264

本来以为这样就行了呢,结果实际中加了点击事件以后又遇到问题啦~~

滑动到最后,点击最后一个item,重新滑回最上面,最上面的item跳动,位置变了,有空白的区域。

在网上找了找,用下面的方法解决了这个问题:

layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {//防止第一行到顶部有空白区域layoutManager.invalidateSpanAssignments();}});

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。