Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/75: Рейтинг темы: голосов - 75, средняя оценка - 4.91
14 / 3 / 0
Регистрация: 10.11.2015
Сообщений: 71
1

Как изменить размер ImageView из кода?

27.01.2016, 10:48. Показов 13534. Ответов 10
Метки нет (Все метки)

Нужно в зависимости от условий рассчитывать и менять высоту изображения ImageView.
Так, как относительно этой ImageView позиционируются другие, то ScaleAnimation не подошло, соседние вьюшки на анимационные изменения размера не реагируют.
В принципе если нет метода для масштабирования изображения меня устроит возможность из кода менять android:layout_height, но не нашёл как. Нужное мне изображение я в background могу поместить, а в src однопиксельное прозрачное.

Добавлено через 7 часов 17 минут
Сработает ли так:
Java
1
2
3
4
5
6
7
8
9
10
11
public class MainActivity extends ActionBarActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ImageView iv = (ImageView)  findViewById(R.id.imageView1); // изображение с которым работаем
            int MyHeight = 200; // желаемая высота, будет меняться по условиям
            float density = getApplicationContext().getResources().getDisplayMetrics().density; // плотность пикселей экрана
            iv.setLayoutParams(new LayoutParams(wrap_content), (int) (density * MyHeight)));
        }
}
Добавлено через 34 минуты
Или 9 строку надо так:
Java
1
iv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, (int) (density * MyHeight)));
Добавлено через 27 минут
Вот такой ещё вариант нашёл:
Java
1
2
3
4
5
ImageView imageView = findViewById(R.id.imageView1);
LayoutParams params = (LayoutParams) imageView.getLayoutParams(); // получаем параметры
int MyHeight = 200; // желаемая высота, будет меняться по условиям
params.height = MyHeight; // меняем высоту. Если уползёт выравнивание, то imageView.getLayoutParams().width = MyHeight;
imageView.setLayoutParams(params); // меняем параметр
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2016, 10:48
Ответы с готовыми решениями:

Как можно указать размер ImageView из кода в DP
Здравствуте, подскажите пожалуйста. Как можно указать размер ImageView из кода в DP? И еще: если...

Программно изменить размер ImageView
public void displeisize() { DisplayMetrics displaymetrics =...

Как изменить размер кнопки сворачивания блока кода?
Может показаться мелочью, но неподсказали бы, как изменить размер симвлола...

Как изменить размер шрифта самого кода в IntelliJ IDEA?
Как изменить размер шрифта самого кода в intellij IDEA? ctrl+колёсико не помагает, перешел на...

10
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
27.01.2016, 10:50 2
Цитата Сообщение от gvsp Посмотреть сообщение
Сработает ли так:
Цитата Сообщение от gvsp Посмотреть сообщение
Или 9 строку надо так:
Цитата Сообщение от gvsp Посмотреть сообщение
Вот такой ещё вариант нашёл:
А проверить религия не позволяет?
0
14 / 3 / 0
Регистрация: 10.11.2015
Сообщений: 71
27.01.2016, 10:55  [ТС] 3
Spelcrawler, Да просто вчера ничего не нашёл. И задал вопрос тут. А сегодня что то похожее по ссылкам отсюда нахожу, но Android Studio под рукой нет.
0
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 49
27.01.2016, 18:00 4
Java
1
imageView.setLayoutParams(new RelativeLayout.LayoutParams(тут число в пикселях, и тут число в пикселях));
1
14 / 3 / 0
Регистрация: 10.11.2015
Сообщений: 71
28.01.2016, 00:33  [ТС] 5
Ничего не работает. LayoutParams Android Studio не знает. С RelativeLayout.LayoutParams вылетает с ошибкой, наверное потому, что вьюшка не в RelativeLayout лежит.

Добавлено через 23 минуты
Заработало так:
Java
1
2
3
4
5
            ImageView imageView = (ImageView)  findViewById(R.id.kolonna2_center);
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) imageView.getLayoutParams(); // получаем параметры
            int MyHeight = 200; // желаемая высота, будет меняться по условиям
            params.height = MyHeight; // меняем высоту. Если уползёт выравнивание, то imageView.getLayoutParams().width = MyHeight;
            imageView.setLayoutParams(params); // меняем параметр
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
28.01.2016, 01:18 6
gvsp, попробуй так:
Java
1
2
3
int width = 100;
int height = 100;
imageView.setMeasuredDimension(width, height)
Хотя метод не для этого предназначен. И вообще задача странная.
0
425 / 406 / 67
Регистрация: 06.10.2012
Сообщений: 1,748
28.01.2016, 09:17 7
Лучший ответ Сообщение было отмечено gvsp как решение

Решение

Недавно делал подобную задачу, к сожалению, под рукой кода нет.
Если не ошибаюсь, там как раз setLayoutParams. Даже если такой метод не подошёл бы к изображению, можно было бы вставить его внутрь какого-нибудь LinearLayout и применить к нему.
1
14 / 3 / 0
Регистрация: 10.11.2015
Сообщений: 71
28.01.2016, 09:19  [ТС] 8
Mikalai, Спасибо, уже получилось через imageView.setLayoutParams(params)
А что странного в задаче, должна меняться высота колонны. Соответственно колонна разбита на три ImageView. Высоту колонны меняю меняя из кода android:layout_height. Вначале пробовал анимацией, но анимация только создаёт ощущение изменения размера, а соседние элементы не замечают этого.

Добавлено через 1 минуту
CoolMind, Да, спасибо, выше я уже написал, что всё получилось. К сожалению не могу сам на свой ответ поставить галочку решение.
0
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
28.01.2016, 12:51 9
о боже, да любому View можно задать параметры через get/setLayoutParams()
если сначала делать get то желательно знать какого типа параметры (Relative/Frame и т.д.) что бы не городить конструкции с проверками instanceof

если размеры и положение вьюшки уже известно и на его LayoutParams наплевать то можно сразу делать примерно так
Java
1
2
3
4
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        params.topMargin = 500; // типа координаты в контейнере по Y
        params.leftMargin = 500; // и X
        view.setLayoutParams(params);
1
14 / 3 / 0
Регистрация: 10.11.2015
Сообщений: 71
28.01.2016, 12:56  [ТС] 10
Паблито, Спасибо. Я уже всё решил, примерно так же, только у меня был LinearLayout. Выше написал как Как изменить размер ImageView из кода?
Напишу ещё тут, а то там на чинается со слов: Ничего не работает и никто дальше не читает, что заработало
РАБОТАЕТ ТАК:
Java
1
2
3
4
5
            ImageView imageView = (ImageView)  findViewById(R.id.kolonna2_center); // вьюшка с которой работаем
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) imageView.getLayoutParams(); // получаем параметры
            int MyHeight = 200; // желаемая высота, будет меняться по условиям
            params.height = MyHeight; // меняем высоту
            imageView.setLayoutParams(params); // меняем параметр
2
CoolMind
28.01.2016, 14:18     Как изменить размер ImageView из кода?
  #11

Не по теме:

Цитата Сообщение от gvsp Посмотреть сообщение
Напишу ещё тут, а то там на чинается со слов: Ничего не работает и никто дальше не читает, что заработало
А я прочитал, но не понял, что это вы сами себе ответили на вопрос, решил просто подтвердить правильность. :)

0
28.01.2016, 14:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2016, 14:18
Привет! Вот еще темы с ответами:

Как задать относительный размер ImageView?
Есть 9 ImageView, которые расположены в RelativeLayout При этом на экране в 4 дюйма они нужного...

Изменить размер iframe из кода содержимого
Возможно ли так делать в последних версиях браузеров и как?

Как изменить размер TImage под текущий размер Picture ?
Доброго времени суток! Есть задача (Delphi 7). В TImage загружается Picture с условиями: Center...

Как в IntelliJ IDEA увеличить размер (размер редактора, кода)?
как в IntelliJ IDEA увеличит размер (размер редактора, кода)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.