翻看腾讯新闻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