Ответ 1
Это хрупкий подход для чего-то подобного. Взгляды Android измеряются их родительским представлением с помощью метода onMeasure
. Предоставляя начальный размер методу setImage
для масштабирования (и особенно, если вы установите его на основе размера экрана), вы вызываете сложность всякий раз, когда хотите вложить этот вид в другие. Хорошим примером этого являются устройства с большим экраном, такие как планшеты.
Более идиоматический подход будет реализовывать метод setImage
метода TouchImageView без параметров ширины/высоты. Вместо этого он откладывает установку шкалы и матриц до измерения и реализует onMeasure
примерно так:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mNeedsInitialScale) { // Set by setImage when a new image is set
// The measured width and height were set by super.onMeasure above
setInitialScale(getMeasuredWidth(), getMeasuredHeight());
mNeedsInitialScale = false;
}
}
Где метод setInitialScale
делает все, что делает связанный метод setImage
после вызова super.setImageBitmap
. setImage
также следует установить для поля mNeedsInitialScale
значение true
.
Таким образом вам никогда не придется беспокоиться об использовании начального размера, он будет автоматически получен из представления во время нормального измерения всякий раз, когда будет установлено новое изображение.