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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
VV0lk
11 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 169
#1

Масштабирование картинок, отрисованных на кнопках - Android

08.09.2015, 10:31. Просмотров 380. Ответов 9
Метки нет (Все метки)

Здравствуйте. Есть кнопки с отрисовнными на них картинками
XML
1
android:drawableLeft="@drawable/icon_temp_btn_on_off"
, где drawable/icon_temp_btn_on_off
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:drawable="@drawable/therometr_Pic_Black" 
     android:state_pressed="false"/>
 
     <item android:drawable="@drawable/therometr_Pic_White"
    android:state_pressed="true"/>
</selector>
естественно на разных диагоналях экранов они либо смотрятся маленькими либо не влезают в кнопку. Подскажите как сделать так, чтобы картинки эти масштабировались в зависимости от размеров дисплея. И возможно ли сделать так: загрузить одну, заведомо большую картинку, с хорошим разрешением и как то настроить так, чтобы она уменьшалась под размер кнопки, а не обрезалась краями кнопки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2015, 10:31     Масштабирование картинок, отрисованных на кнопках
Посмотрите здесь:

Android Масштабирование картинок из drawable
Масштабирование Canvas Android
Масштабирование ImageView в процентах от размера дисплея Android
Как рисовать на кнопках Android
Масштабирование картинки в зависимости от разрешения экрана Android
Текст в 2 строки на кнопках(картинка в bg). Кнопки "ездят", портится их форма и тд Android
Android Программное масштабирование
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 590
08.09.2015, 11:45     Масштабирование картинок, отрисованных на кнопках #2
Цитата Сообщение от VV0lk Посмотреть сообщение
естественно на разных диагоналях экранов они либо смотрятся маленькими либо не влезают в кнопку. Подскажите как сделать так, чтобы картинки эти масштабировались в зависимости от размеров дисплея. И возможно ли сделать так: загрузить одну, заведомо большую картинку, с хорошим разрешением и как то настроить так, чтобы она уменьшалась под размер кнопки, а не обрезалась краями кнопки?
Странно, что Вы знаете о селекторах, но не знаете структуре ресурсов. Вам всего-навсего необходимо для положить картинки в drawable для нужного типа экранов, например: /drawable-mdpi - это для экранов средней плотности, плотности на текущий день варьируют от ldpi (мало устройств) до xxxhdpi

Добавлено через 1 минуту
И просто совет Вам из личного опыта: используйте префексы у картинок, то есть не arrow, в ic_arrow, не button, а bg_button и т.д.
Паблито
2195 / 1809 / 562
Регистрация: 12.05.2014
Сообщений: 6,445
Завершенные тесты: 1
08.09.2015, 11:46     Масштабирование картинок, отрисованных на кнопках #3
Честно говоря мне лень проверять с селектором, но у меня прямо в рабочей программе вот так вот drawableLeft добавляется картинка на кнопку и она масштабируется нормально.
Находится она в drawable. Автоматом масштабируется, без кучи картинок под все плотности.
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 590
08.09.2015, 11:49     Масштабирование картинок, отрисованных на кнопках #4
Цитата Сообщение от Паблито Посмотреть сообщение
Честно говоря мне лень проверять с селектором, но у меня прямо в рабочей программе вот так вот drawableLeft добавляется картинка на кнопку и она масштабируется нормально.
Находится она в drawable. Автоматом масштабируется, без кучи картинок под все плотности.
Работать будет и без кучи плотностей, но иногда это просто необходимо, например, сохранить толщину обводки или детализацию понизить картинки. Android довольно эффективно сжимает картинки, но все же обработка картинки высокого разрешения на слабом устройстве будет излишней нагрузкой.
VV0lk
11 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 169
08.09.2015, 11:59  [ТС]     Масштабирование картинок, отрисованных на кнопках #5
Нет, о структуре ресурсов я конечно знаю. Но как подобрать размер картинки для этих плотностей? Вот например ставлю я в визуальном редакторе девайс с экраном 4,65" 720p подгоняю размер картинки под него, чтоб смотрелось хорошо (допустим это 49х49 пикселей), а на сколько дальнейшие размеры уменьшать/увеличивать? Например каких размеров сделать эту картинку для xdpi или для xxxhdpi ?
Честно говоря мне лень проверять с селектором, но у меня прямо в рабочей программе вот так вот drawableLeft добавляется картинка на кнопку и она масштабируется нормально.
Находится она в drawable. Автоматом масштабируется, без кучи картинок под все плотности.
Вот и я в принципе так хотел, но не получается! Вот мой код разметки бокового Fly-Out меню с кнопками, может в разметке дело?
Кликните здесь для просмотра всего текста
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="300dp"
    android:layout_height="fill_parent"
    android:background="#ff2A5FB1"
    android:id="@+id/FlyOutMenu"
    android:padding="4dp"
    android:weightSum="100">
    <TextView
        android:text="Меню Графиков"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:textColor="#ffc1c1c1"
        android:padding="4dp"
        android:background="#ff2A5FB1" />
    <View
        android:layout_width="wrap_content"
        android:layout_height="2dp"
        android:id="@+id/view1"
        android:background="#ffc1c1c1" />
    <Button
        android:text="Температура нагревателя"
        android:layout_width="match_parent"
        android:id="@+id/button1"
        android:drawableLeft="@drawable/icon_temp_btn_on_off"
        style="@style/styleFlyOutMenuButton"
        android:layout_weight="25"
        android:gravity="center"
        android:layout_margin="2dp"
        android:layout_height="0dp" />
    <View
        android:layout_width="wrap_content"
        android:background="@drawable/separator"
        android:layout_height="2dp" />
    <Button
        android:text="Давление"
        android:layout_width="match_parent"
        android:id="@+id/button2"
        android:drawableLeft="@drawable/icon_pressure_btn_on_off"
        style="@style/styleFlyOutMenuButton"
        android:layout_weight="25"
        android:gravity="center"
        android:layout_margin="2dp"
        android:layout_height="0dp" />
    <View
        android:layout_width="wrap_content"
        android:background="@drawable/separator"
        android:layout_height="2dp" />
    <Button
        android:text="Напряжение"
        android:layout_width="match_parent"
        android:id="@+id/button3"
        android:drawableLeft="@drawable/icon_voltage_btn_on_off"
        style="@style/styleFlyOutMenuButton"
        android:layout_weight="25"
        android:gravity="center"
        android:layout_margin="2dp"
        android:layout_height="0dp" />
    <View
        android:layout_width="wrap_content"
        android:background="@drawable/separator"
        android:layout_height="2dp" />
    <Button
        android:text="Температура окр. среды"
        android:layout_width="match_parent"
        android:id="@+id/button4"
        android:drawableLeft="@drawable/icon_temp_btn_on_off"
        style="@style/styleFlyOutMenuButton"
        android:layout_weight="25"
        android:gravity="center"
        android:layout_margin="2dp"
        android:layout_height="0dp" />
    <View
        android:layout_width="wrap_content"
        android:background="@drawable/separator"
        android:layout_height="2dp" />
</LinearLayout>
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 590
08.09.2015, 13:03     Масштабирование картинок, отрисованных на кнопках #6
mdpi = 1
ldpi = 0.75
hdpi = 1.5
xhdpi = 2
xxhdpi = 3
Паблито
2195 / 1809 / 562
Регистрация: 12.05.2014
Сообщений: 6,445
Завершенные тесты: 1
08.09.2015, 13:14     Масштабирование картинок, отрисованных на кнопках #7
у тебя размеры кнопок заданы в пикселях, там не хватает букв "dp", поэтому на экранах кнопки получаются разные
я в шоке...как люди вообще живут, так писать...

и дополнительное чтиво, читать внимательно, а не пробежаться по диагонали
http://developer.android.com/guide/p...s_support.html
VV0lk
11 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 169
08.09.2015, 14:10  [ТС]     Масштабирование картинок, отрисованных на кнопках #8
у тебя размеры кнопок заданы в пикселях, там не хватает букв "dp", поэтому на экранах кнопки получаются разные
я в шоке...как люди вообще живут, так писать...
Где это?! У кнопок
XML
1
2
android:layout_width="match_parent"
android:layout_height="0dp"
а android:layout_weight="25" Это Вес кнопок по высоте в родительском лейауте. Чтобы 4 кнопки (по 25% каждая) всегда занимали всю площадь, в не зависимости от размера.
и дополнительное чтиво, читать внимательно, а не пробежаться по диагонали
http://developer.android.com/guide/p...s_support.html
Спасибо. Почитаю.
Паблито
2195 / 1809 / 562
Регистрация: 12.05.2014
Сообщений: 6,445
Завершенные тесты: 1
08.09.2015, 14:58     Масштабирование картинок, отрисованных на кнопках #9
я виноват, недоглядел
скопировал себе разметку и подставил большую картинку - действительно она занимает все место на кнопке и не масштабируется
у меня просто картинка маленькая в проекте и смотрится везде нормально

если принципиально надо картинку рядом с текстом то проще всего, мне кажется, сделать так
вместо
XML
1
2
3
4
5
6
7
8
9
10
<Button
        android:text="Температура нагревателя"
        android:layout_width="match_parent"
        android:id="@+id/button1"
        android:drawableLeft="@drawable/icon_temp_btn_on_off"
        style="@style/styleFlyOutMenuButton"
        android:layout_weight="25"
        android:gravity="center"
        android:layout_margin="2dp"
        android:layout_height="0dp" />
писать
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    <LinearLayout
        style="@android:style/Widget.Button"
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="25"
        android:orientation="horizontal">
 
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:src="@drawable/ic_bla_bla" />
 
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Температура нагревателя" />
 
    </LinearLayout>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2015, 15:03     Масштабирование картинок, отрисованных на кнопках
Еще ссылки по теме:

ImageView в активити, можно ли сделать масштабирование "пальцами"? Android
Масштабирование компонентов на андроиде Android
Android Как реализовать масштабирование рисунка?
Android Обновление БД на андроид, Масштабирование иконок
Масштабирование элементов экрана Android

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

Или воспользуйтесь поиском по форуму:
VV0lk
11 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 169
08.09.2015, 15:03  [ТС]     Масштабирование картинок, отрисованных на кнопках #10
Была у меня такая мысль, но как тогда отслеживать "Click" по Layout-ам и менять цвет текста и картинок при касании? Так что остается только рожать множество картинок под разный dpi ?
Yandex
Объявления
08.09.2015, 15:03     Масштабирование картинок, отрисованных на кнопках
Ответ Создать тему
Опции темы

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