Android 4.3 ImageView ScaleType.MATRIX

днес настроих новия Android JB 4.3 на моя Nexus 7 и аз опитах да стартирам приложението си.

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

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

проблемът изглежда е, че вече не мога да актуализирам матрицата, просто трябва да инстанцирам нова и да я предам на Изглед на изображение.

успях да го заобиколя, създавайки всеки път нова 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
в първия случай изображението се показва в горния ляв ъгъл на imageView без прилагане на мащаб или превод. Сякаш матрицата е нулирана.   -  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