Android TransitionDrawable: тип масштабирования изображения изменяется при возобновлении фрагмента

У меня есть ImageView, установленный в качестве фона для фрагмента (для изображения задано значение match_parent как по ширине, так и по высоте), а для масштабирования установлено значение centerCrop. Я загружаю изображение, чтобы вставить его асинхронно, и использую TransitionDrawable для перехода между ними после завершения загрузки.

Изображение появляется с правильным типом масштабирования в первый раз, однако, если я перейду к другому фрагменту, а затем вернусь к этому фрагменту с изображением в качестве фона, изображение будет искажено/растянуто (похоже, вместо этого для imageView установлено значение fitXY)

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

Есть ли эквивалент TransitionDrawable, поддерживающий правильное соотношение сторон? Или мне нужно что-то установить на TransitionDrawable, чтобы предотвратить изменение размера?

Все, что я действительно хочу сделать, это сделать хороший переход между изображениями. Я думал просто установить изображение на второй слой, который можно нарисовать TransitionDrawable, как только он закончит анимацию, но нет возможности отслеживать, когда анимация закончилась...

редактировать: я думал, что упомяну, что изображения не одного размера, не уверен, что это имеет значение

Редактировать 2: Вот код для установки возможности рисования:

  //code above to download image
 BitmapDrawable bitmapDrawable = new BitmapDrawable(imageview.getResources(), bitmap);
        TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{imageview.getDrawable(), bitmapDrawable});
        imageview.setImageDrawable(transitionDrawable);
        transitionDrawable.startTransition(300);

person AndroidNoob    schedule 15.10.2013    source источник
comment
где вы используете ТД? как фон Drawable или как изображение Drawable?   -  person pskink    schedule 15.10.2013
comment
Я создаю TransitionDrawable с отрисовкой заполнителя, которая уже существует в ImageView (используя ImageView.getDrawable() ), и недавно загруженным растровым изображением (как BitmapDrawable), а затем использую ImageView.setImageDrawable(), чтобы установить возможность рисования перехода.   -  person AndroidNoob    schedule 15.10.2013
comment
Вы использовали setBackgroundDrawable? если это так, не делайте этого, так как это растягивает Drawable   -  person pskink    schedule 15.10.2013
comment
Нет, это определенно был ImageView.setImageDrawable(Drawable). Это работает, если я не использую TransitionDrawable (т.е. просто устанавливаю загруженное растровое изображение прямо в ImageView), тип масштаба остается таким, каким он должен быть, и даже использование TransitionDrawable в первый раз работает, это только если я перехожу к другому фрагменту, а затем обратно что масштабный тип, кажется, идет наперекосяк, если ImageView содержит TransitionDrawable   -  person AndroidNoob    schedule 15.10.2013
comment
напиши код как ты это делаешь   -  person pskink    schedule 15.10.2013
comment
размещенный выше код, когда я устанавливаю TransitionDrawable   -  person AndroidNoob    schedule 15.10.2013


Ответы (1)


Используете ли вы изображения разных размеров? Это может быть причиной проблемы. Попробуйте использовать изображения одинакового размера.

Редактировать: найдено решение: вам нужно снова установить тип масштабирования ImageView после использования команды setImageDrawable.

    BitmapDrawable bitmapDrawable = new BitmapDrawable(imageview.getResources(), bitmap);
    TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{imageview.getDrawable(), bitmapDrawable});
    imageview.setImageDrawable(transitionDrawable);
    imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
    transitionDrawable.startTransition(300);
person Saket    schedule 20.01.2014
comment
Не работает. Изображение сжимается до размера предыдущего изображения. - person Debanjan; 23.08.2018