Android 4.3 ImageView ScaleType.MATRIX

сегодня я установил новый Android JB 4.3 на свой Nexus 7 и попытался запустить мое приложение.

Все работает так, как должно, за исключением одной мелочи, касающейся ImageViews с ScaleType.MATRIX.

По сути, в моем приложении есть ImageView в качестве фона и, соответственно, обратные вызовы ViewPager перемещают сфокусированную часть изображения обновление Matrix, которое я передал в imageView, используя setImageMatix(Матричная матрица).

проблема в том, что я больше не могу обновлять матрицу, мне просто нужно создать новую и передать ее в ImageView.

мне удалось обойти это, создавая каждый раз новую Matrix, но это кажется ужасно память дорогая по сравнению со старой версией.

это ОШИБКА? есть ли способ обновить Matrix? (кстати, я уже пытался invalidate() ImageView и т. д. )

НЕ РАБОТАЕТ

    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 без применения к нему масштаба или преобразования, как если бы матрица вернулась к идентичности.


person Mario Lenci    schedule 26.07.2013    source источник
comment
Так что же происходит в первом случае? Каковы симптомы?   -  person Desert    schedule 26.07.2013
comment
в первом случае изображение отображается в верхнем левом углу изображения без применения масштабирования или преобразования. Как будто матрица была сброшена.   -  person Mario Lenci    schedule 26.07.2013


Ответы (2)


Просто сохраните поле Matrix как вместо того, чтобы извлекать его из ImageView, и будет вам счастье :)

person Dmitry Zaytsev    schedule 26.07.2013
comment
в любом случае комментарий getImageMatrix() говорит: не меняйте эту матрицу на месте, а сделайте копию. Если вы хотите, чтобы к рисунку применялась другая матрица, обязательно вызовите setImageMatrix(). интересно, означает ли это, что мы должны работать с другой матрицей, чем текущая. - person Mario Lenci; 26.07.2013
comment
@MarioLenci во-первых, ImageView сильно зависит от своего Matrix, который даже сохраняется между изменениями конфигурации. Во-вторых, стараются предотвратить такие ситуации, когда несколько ImageView делят один Matrix. - person Dmitry Zaytsev; 26.07.2013

Может быть ошибка с масштабированием ImageView, начиная с 4.3. См. мой вопрос и ответ об этой ошибке.

person kburbach    schedule 09.12.2013
comment
причина минуса...? Это напрямую связано с проблемой масштабирования изображения... - person kburbach; 30.01.2014