Изображение перекрывается с другими изображениями при масштабировании
Я программно добавляю элементы ImageView в горизонтальный линейный макет. Затем я установил свойства scaleX и scaleY равными 2 на одном из ресурсов ImageView. Изображение корректно масштабируется, но оно не перемещает другие элементы ImageView, вместо этого оно перекрывает их. Мне не нравится, чтобы изображение перекрывалось с другими изображениями. Как я могу это исправить? Вот мой код:
int resources[] = {R.drawable.desert, R.drawable.koala, R.drawable.jellyfish,
R.drawable.lighthouse, R.drawable.desert};
for(int i=0; i<5; i++) {
ImageView logo = new ImageView(this);
logo.setLayoutParams(new LinearLayout.LayoutParams(100, 75));
logo.setImageResource(resources[i]);
logosContainer.addView(logo);
}
ImageView middleImage = (ImageView) logosContainer.getChildAt(2);
middleImage.setScaleX(middleImage.getScaleX() * 2);
middleImage.setScaleY(middleImage.getScaleY() * 2);
Результат из кода выглядит следующим образом: http://imageshack.us/a/img15/2811/scaleal.jpg
Вы можете ясно видеть, что масштабированное изображение перекрывается с другими изображениями.
1 ответ
Ваши ImageViews уже измерены и помещены в контейнер, когда вы выходите из цикла. Вам придется обновить макет, чтобы сделать эту работу сложной, что часто приводит к "удалению всех видов и добавлению их снова". Так почему бы вам просто не сделать "масштабирование" в цикле?
for(int i=0; i<5; i++) {
ImageView logo = new ImageView(this);
if(i==middleImageIndex){
logo.setLayoutParams(new LinearLayout.LayoutParams(100*2, 75*2,1));
} else {
logo.setLayoutParams(new LinearLayout.LayoutParams(100, 75,1));
}
logo.setImageResource(resources[i]);
logosContainer.addView(logo);
}
Последний параметр (100,75, 1) - это вес вида, который гарантирует, что каждый ImageView одинаково важен и не перекрывается.
Еще одно замечание: setScale требует API уровня 11 или выше, что может сократить количество пользователей.