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,甚至在配置更改之间保存。其次,他们试图防止这种情况,当几个ImageViews 共享一个Matrix【参考方案2】:

从 4.3 开始,ImageView 缩放可能存在错误。见我的question and answer about this bug。

【讨论】:

投反对票的原因...?它直接关系到imageview缩放的问题...

以上是关于Android 4.3 ImageView ScaleType.MATRIX的主要内容,如果未能解决你的问题,请参考以下文章

android中ImageView放大和缩小相关问题?

android 中怎么控制ImageButton 上的图片与按钮尺寸的匹配

基于android studio开发 安卓控件的基础属性1

基于android studio开发 安卓控件的基础属性1

基于android studio开发 安卓控件的基础属性1

今日小结 4.3