Android 4.3 ImageView ScaleType.MATRIX
Posted
技术标签:
【中文标题】Android 4.3 ImageView ScaleType.MATRIX【英文标题】: 【发布时间】:2013-07-26 14:14:32 【问题描述】:今天我在我的 Nexus 7 上设置了新的 android JB 4.3 并尝试运行我的应用程序。
除了ImageViews 和ScaleType.MATRIX 的一件小事外,一切正常。
基本上我在我的应用程序中拥有一个ImageView 作为背景,并根据ViewPager 回调移动图像的焦点部分,更新我使用setImageMatix( Matrix matrix ) 提供给imageView 的Matrix。
问题似乎是我无法再更新矩阵了,我只需要实例化一个新矩阵并将其传递给ImageView。
我设法解决它,每次实例化一个新的Matrix,但与旧版本相比,它的内存似乎非常昂贵。
这是一个BUG吗? 有没有办法更新Matrix? (顺便说一句,我已经尝试过invalidate() ImageView ecc。)
不工作
private void updateMatrix( final int page, final double offset )
double pagePosition = page + offset;
Matrix matrix = imageView.getImageMatrix();
matrix.setScale( scale, scale );
matrix.postTranslate( - (float) ( pagePosition * pageWidth ) , 0 );
imageView.setImageMatrix( matrix );
imageView.invalidate();
工作中
private void updateMatrix( final int page, final double offset )
double pagePosition = page + offset;
Matrix matrix = new Matrix();
matrix.setScale( scale, scale );
matrix.postTranslate( - (float) ( pagePosition * pageWidth ) , 0 );
imageView.setImageMatrix( matrix );
imageView.invalidate();
编辑:
在第一种情况下,图像显示在 ImageView 的左上角,没有应用任何缩放或平移,就像矩阵恢复身份一样。
【问题讨论】:
那么第一种情况发生了什么?有什么症状? 在第一种情况下,图像显示在 imageView 的左上角,没有应用任何缩放或平移。好像矩阵被重置了一样。 【参考方案1】:只需将您的 Matrix
保留为字段,而不是从 ImageView
检索它,您会很高兴 :)
【讨论】:
无论如何 getImageMatrix() 的评论说:不要改变这个矩阵,而是复制一份。如果您想将不同的矩阵应用于可绘制对象,请务必调用 setImageMatrix()。我想知道这是否意味着我们应该使用与当前矩阵不同的矩阵。 @MarioLenci 首先,ImageView
高度依赖其Matrix
,甚至在配置更改之间保存。其次,他们试图防止这种情况,当几个ImageView
s 共享一个Matrix
【参考方案2】:
从 4.3 开始,ImageView 缩放可能存在错误。见我的question and answer about this bug。
【讨论】:
投反对票的原因...?它直接关系到imageview缩放的问题...以上是关于Android 4.3 ImageView ScaleType.MATRIX的主要内容,如果未能解决你的问题,请参考以下文章