1、效果描述
知乎看到的一种非常有特色的广告展现方式,即在列表页,某一个Item显示背后部分广告图,随着列表滚动,会逐渐展示全部图片。
2、实现
- 2.1 实现思路
在需要列表滚动时候,改变图片的显示部分
有两个核心点
捕获列表滚动变化的dy,不管是ListView还是RecyclerView都可以做到
图片显示部分变化,可以利用canvas.translate
方案一:
自定义view,自己去绘制bitmap,对外暴露setDy(dy),然后根据dy做canvas.translate偏移重绘即可
方案二:(更优)
利用Drawable本身就是可以绘制的,直接利用drawable去完成,当然还是要结合canvas.translate
注意super.onDrawer的调用时机
3、涉及到的技术点
- 3.1 ImageView:ScaleType
不进行缩放:
1 | MATRIX |
等比例缩放
1 | CENTER_CROP: 对原图居中显示后进行等比放缩处理,使原图最小边等于ImageView的相应边。 |
不等比例缩放
1 | FIT_XY: 对原图宽高进行放缩,该放缩不保持原比例来填充满ImageView。 |
图片信息可能丢失
1 | MATRIX |
图片过小时不会放大的情况
1 | 不缩放肯定就不会放大 MATRIX |