Это хрупкий подход для чего-то подобного. Представления Android измеряются их родительским представлением с использованием метода onMeasure
. Предоставляя начальный размер методу setImage
для масштабирования (и особенно если вы устанавливаете его в зависимости от размера экрана), вы предлагаете сложность всякий раз, когда хотите вложить этот вид в другие. Хорошие примеры тому - устройства с большим экраном, такие как планшеты.
В более идиоматическом подходе реализован метод TouchImageView setImage
без параметров ширины / высоты. Вместо этого он отложил бы установку масштаба и матриц до измерения и реализовал 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
.
Таким образом, вам никогда не придется беспокоиться о начальном размере, который будет использоваться, он будет автоматически получен из просмотра при обычном измерении при установке нового изображения.