Форум программистов, компьютерный форум CyberForum.ru

Картинка в imageButton (setImageResource) - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.66
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
20.10.2014, 13:46     Картинка в imageButton (setImageResource) #1
Вопрос такой:
В приложении имеется кнопка-картинка (imageButton) при нажатии которой меняется ее фон:
Java
1
2
3
    public void imageButtonClick(View v){ 
        button.setBackgroundResource(R.drawable.picture); 
    }
Если размеры картинки, которую я ставлю в качестве фона (picture), больше размера кнопки, то кнопка растягивается. Как этого избежать и при изменении фона сохранить размеры кнопки?

Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2014, 13:46     Картинка в imageButton (setImageResource)
Посмотрите здесь:

ImageButton setImageResource Android
Android Выдвижные ImageButton
ImageButton Android
Android не работает с ImageButton
ImageButton с прозрачным фоном Android
Работа с ImageButton Android
Нажатие ImageButton Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
20.10.2014, 14:24     Картинка в imageButton (setImageResource) #2
жестко задать размеры кнопки в dp, как вариант
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
20.10.2014, 15:19  [ТС]     Картинка в imageButton (setImageResource) #3
Цитата Сообщение от Паблито Посмотреть сообщение
жестко задать размеры кнопки в dp, как вариант
размеры кнопки не заданы в dp.
Просто у меня имеется 3 кнопки, которые идут в ряд по горизонтали и занимают равное пространство:
Java
1
android:layout_weight="1"
и есть 3 ряда таких кнопок. Каждый ряд - отдельный LinearLayout и все три LinearLayout'a тоже имеют строку:
Java
1
android:layout_weight="1"
Однако если в одну их кнопок установить фон с высоким разрешением, то LinearLayout немного растягивается.

Вот весь код:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
   <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">
 
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
 
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton0"
                android:layout_weight="1"
                android:onClick="button0Click"/>
 
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton1"
                android:layout_weight="1"/>
 
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton2"
                android:layout_weight="1"/>
        </LinearLayout>
 
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton3"
                android:layout_weight="1"/>
 
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton4"
                android:layout_weight="1"/>
 
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton5"
                android:layout_weight="1"/>
            </LinearLayout>
 
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton6"
                android:layout_weight="1"/>
 
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton7"
                android:layout_weight="1"/>
 
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:id="@+id/imageButton8"
                android:layout_weight="1"/>
            </LinearLayout>
</LinearLayout>
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
20.10.2014, 15:34     Картинка в imageButton (setImageResource) #4
Либо ставить картинку не в src, а в backround (что не хорошо), либо делать картинку в 9patch, что не возможно если картинка загружена из интернета. В этом случае картинки нужно предварительно сжимать до нужного разрешения. Более легких способ похоже нет.
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
20.10.2014, 16:17  [ТС]     Картинка в imageButton (setImageResource) #5
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Либо ставить картинку не в src, а в backround (что не хорошо), либо делать картинку в 9patch, что не возможно если картинка загружена из интернета. В этом случае картинки нужно предварительно сжимать до нужного разрешения. Более легких способ похоже нет.
Очень странно. Просто если приложение будет открыто на телефонах с разными размерами экрана и разрешением, то не будет несуразицы с размером кнопки(изображения)?
Кстати, как видно из первого поста, я как раз таки и меня backround, а не src

Добавлено через 9 минут
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Либо ставить картинку не в src, а в backround (что не хорошо), либо делать картинку в 9patch, что не возможно если картинка загружена из интернета. В этом случае картинки нужно предварительно сжимать до нужного разрешения. Более легких способ похоже нет.
+Как определить нужный размер изображения в пикселях? методом тыка? вряд ли.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
20.10.2014, 16:22     Картинка в imageButton (setImageResource) #6
Цитата Сообщение от Vl_zemtsov Посмотреть сообщение
Кстати, как видно из первого поста, я как раз таки и меня backround, а не src
Java
1
setBackgroundResource != setBackgroundDrawable
Цитата Сообщение от Vl_zemtsov Посмотреть сообщение
Как определить нужный размер изображения в пикселях?
Очень просто: берем размер в dp, находим количество пикселей на 1dp, умножаем первое на второе и вот оно - нужный размер в пикселях.
Но если картинки у вас уже есть готовые и не будут изменятся со временем - советую 9patch.
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
20.10.2014, 16:37  [ТС]     Картинка в imageButton (setImageResource) #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Очень просто: берем размер в dp, находим количество пикселей на 1dp, умножаем первое на второе и вот оно - нужный размер в пикселях.
На разных устройствах разное экранное разрешение, следовательно разное кол-во пикселей на dp. Т.е. этот метод не подходит.

Попытался попробовать с "setBackgroundDrawable", однако Android studio зачеркнул это наименование и не дал запуститься компилятору.

Читаю про 9patch. Надеюсь поможет)
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
20.10.2014, 16:49     Картинка в imageButton (setImageResource) #8
Цитата Сообщение от Vl_zemtsov Посмотреть сообщение
Попытался попробовать с "setBackgroundDrawable", однако Android studio зачеркнул это наименование и не дал запуститься компилятору.
Зачеркнул т.к. метод устарел, не дать запуститься не может. Новый метод (setBackround) работает только с 15 (или 16) версии api.
Цитата Сообщение от Vl_zemtsov Посмотреть сообщение
На разных устройствах разное экранное разрешение, следовательно разное кол-во пикселей на dp. Т.е. этот метод не подходит.
Ну дак его же можно получить уже на устройстве.
Java
1
2
3
4
5
6
public static float convertDpToPixel(float dp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * (metrics.densityDpi / 160f);
    return px;
}
Отправляете в этот метод ваш размер в dp, он вам вернет этот размер в пикселях.
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
20.10.2014, 17:06  [ТС]     Картинка в imageButton (setImageResource) #9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Ну дак его же можно получить уже на устройстве.
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
public static float convertDpToPixel(float dp, Context context){
* * Resources resources = context.getResources();
* * DisplayMetrics metrics = resources.getDisplayMetrics();
* * float px = dp * (metrics.densityDpi / 160f);
* * return px;
}
Отправляете в этот метод ваш размер в dp, он вам вернет этот размер в пикселях.
Тогда придется мутить набор картинок для каждого экранного разрешения, чем точно не хочется заниматься.
Я же картинки заранее делаю для приложения и то, что количество пикселей рассчитается когда мое приложение уже запущено мне ничем не поможет.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
20.10.2014, 17:10     Картинка в imageButton (setImageResource) #10
Ну я же писал
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Но если картинки у вас уже есть готовые и не будут изменятся со временем - советую 9patch.
Добавлено через 2 минуты
Цитата Сообщение от Vl_zemtsov Посмотреть сообщение
Тогда придется мутить набор картинок для каждого экранного разрешения
Мутить не нужно) Нужно будет просто сжимать\расширять картинки в самом приложении. Т.е. есть исходная картинка скачанная из интернета, заранее знать ее размер не возможно.
1. Берем картинку
2. смотрим ее размер
3. смотрим какой нам нужно
4. приводим картинку к нужному размеру
5. ....
6. Profit
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
20.10.2014, 17:50  [ТС]     Картинка в imageButton (setImageResource) #11
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Мутить не нужно) Нужно будет просто сжимать\расширять картинки в самом приложении. Т.е. есть исходная картинка скачанная из интернета, заранее знать ее размер не возможно.
1. Берем картинку
2. смотрим ее размер
3. смотрим какой нам нужно
4. приводим картинку к нужному размеру
5. ....
6. Profit
А каким образом сделать пункт 4?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
20.10.2014, 17:54     Картинка в imageButton (setImageResource) #12
Цитата Сообщение от Vl_zemtsov Посмотреть сообщение
А каким образом сделать пункт 4?
Вот тут есть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2014, 20:16     Картинка в imageButton (setImageResource)
Еще ссылки по теме:

ImageButton с картинкой из файла Android
Android SetImageResource в CursorAdapter
Android Картинка выходит за границы ImageButton
Android Смена изображения ImageButton
Android ImageButton hover

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

Или воспользуйтесь поиском по форуму:
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
20.10.2014, 20:16  [ТС]     Картинка в imageButton (setImageResource) #13
попробовал с использованием 9patch, однако тол что мне нужно сделать не вышло. Мне нужно не кнопку гладкой по краям сделать, а полностью поменять ее фон. Т.е. когда я присваиваю .setBackroundResurce кнопка все равно растягивается.

Попробовал проделать все тоже самое, но с кнопкой 10х10 пикселей, т.е. маленького разрешения. Она, благо, растянулась до размеров кнопки, однако и тут есть проблема. Если раньше у кнопки соотношение сторон были 4х4, то после того, как я использовал .setBackroundResurce это соотношение изменилось на 1х1..
...

Можно по другому:
Мну нужно сделать на экране квадратное поле из 9 кнопок (поле 3х3, кнопки квадратные). Как это организовать? (если кнопки будут квадратные, то это решит практически все мои пролеммы.
Yandex
Объявления
20.10.2014, 20:16     Картинка в imageButton (setImageResource)
Ответ Создать тему
Опции темы

Текущее время: 18:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru