RecyclerView滑动窗口显示大尺寸广告位

本文介绍了如何在RecyclerView中实现滑动窗口显示大尺寸广告位的两种方案。方案一通过在底部放置ImageView,上层使用RecyclerView,但布局不够简化。方案二采用局部加载思路,当RecyclerView滑动时,ImageView显示不同部分,支持多个广告位,数据填充更灵活。
摘要由CSDN通过智能技术生成

翻看腾讯新闻App时,发现有个广告UI交互挺好玩的。先看图


gif图片可能有点卡,从视觉上看,有点像底部放了张海报,上层列表有个窗口透视过去,随着滚动窗口看到底部海报不同部分。
撸起袖子开干。
一般自定义View相关的,第一步就是做拆解。首先,如果从排版看,最外层View不是RecyclerView就是ListView

方案一

如图:底部是一个ImageView,上层是一个列表RecyclerView,设置列表背景为透明的,根据item type加载不同ViewHolder,当需要展示底部广告时,其ViewHolder itemView背景为透明的,即可满足UI的效果。

不足:布局不够简化,数据填充不灵活,如果屏幕内出现多个相关类型的窗口时,不满足加载不同的海报。方案二

方案二

如果广告窗口是ImageView,按照大图的局部加载显示思想,当窗口ViewHolder向上滑,图片显示下部分区域,反之,窗口ViewHolder往下滑时,图片显示上部分。

代码实现: 

    public class ScrollWindowImageView extends AppCompatImageView {
         private boolean initialized;
         private Matrix matrix;
         private boolean isScrollDown = true;
         private float translate;

         public ScrollWindowImageView(Context context) {
              this(context, null);
         }

         public ScrollWindowImageView(Context context, AttributeSet attrs) {
              this(context, attrs, 0);
         }

         public ScrollWindowImageView(Context context, AttributeSet attrs, int defStyleAttr) {
             super(context, attrs, defStyleAttr);
             setScaleType(ScaleType.MATRIX);
         }

         @Override
         protected void onSizeChanged(int w, int h, int oldw, int oldh) {
             super.onSizeChanged(w, h, oldw, oldh);
             initialized = true;
             initImage();
         }

         private void initImage() {
             final Drawable drawable = getDrawable();
             if (!initialized || drawable == null) {
                 return;
             }
             fin
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值