ImageView属性ScaleType中Matrix的使用
背景
有一个需求是,两张图片重叠在一起,上层的图片要有一个从下到上消失的动画。
尝试解决方案
1.使用Canvas中xfermode,放置一张白色图片,修改图片的放置位置。让上层图片实现一部分消失。(太过复杂)
2.使用shader去做,也是Canvas中的内容。应用的是当shader比内容小的时候,就不渲染shader外的内容。(没尝试过,没把握)
3.跟同事讨论后,可以使用Matrix解决。也就是此篇记录。
Matix的效果
保证图片的大小,超出图片的部分不展示。图片放置的起点,是左上角。
使用
xml中设置
在xml中的ImageView中设置以下标签。
android:scaleType="matrix"
在使用以前的代码中,要设置Matrix。
mImageShade.imageMatrix = Matrix()
代码设置
比较推荐代码设置,毕竟你都要在代码里设置maxtix。所以何不一起设置了。
mImageShade.scaleType = ImageView.ScaleType.MATRIX
mImageShade.imageMatrix = Matrix()
拓展
当然Matix还可以配置,比如平移,旋转。当然,是以左上角为基准
matrix.setTranslate(100, 100); //平移x和y各100单位
matrix.preRotate(30); //顺时针旋转30度
思考
matrix在屏幕适配中,是否会有问题?如果是用的放在drawable中的图片应该没有问题。毕竟UI的切图都是按照屏幕比例。Android在加载xhdpi
和xxhdpi
的时候,会对图片进行缩放。如果ImageView的尺寸和图片尺寸是一致的话,应该没有问题。
如果是用Glide等网络下载的图片,我没有尝试过,目前未知。