powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Наложение изображений в кнопках
92 сообщений из 92, показаны все 4 страниц
Наложение изображений в кнопках
    #38795859
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть изображение кнопки, которое засунуто в ImageButton, все хорошо.
Необходимо в зависимости от состояния
- нажата
- получила фокус
- доступна
- недоступна
Менять изображение кнопки.
И вроде не вопрос, но не нравится то, что получается, что т.к. на каждой кнопке нарисован же свой текст еще,
придется для каждой кнопки, для каждого состояния иметь свое изображение, то есть будет 40 кнопок в приложении, надо будет в ресурсы засунуть 160!! изображений. Понятно, что это неадекватный подход какой-то )
Поэтому, хотел бы разделить изображение кнопки и изображение надписи на ней, чтобы иметь всего допустим 4 изображения состояния кнопки и изображения надписей по количеству кнопок. Тогда в том же примере на 40 кнопок понадобится 44 изображения - уже по божески )
Или еще лучше, если бы у ImageButton была возможность задавать свойство надписи текстом, правда не получится уже красиво, да и если разные состояния кнопки где ее изображение должно быть как бы смещено (например кнопка "утоплена" при нажатии) с обычным текстом так не прокатит - текст-то на месте останется же. В общем пока непонятно, как грамотно делать )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38795893
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем текст картинкой ?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38795904
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джибса зачем текст картинкой ?
+1. Кнопка это кнопка, а её текст задается в ресурсах.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38795908
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибса зачем текст картинкой ?
1. красивее как бы, с тенью и т.п. )
2. не нашел у ImageButton как задать текст кнопки
3. когда кнопка нажата, надо, чтобы изображение кнопки сместить вниз, чтобы визуально создать эффект, что она нажата, что по-моему можно сделать подменив изображение на другое, заодно и текст в ней сместится, если он будет нарисован
Но засада в том, что тогда придется в приложение засовывать кучу картинок кнопок с надписями, что естественно не охота делать
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38795914
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38796193
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопкикрасивее как бы, с тенью и т.п. )

тень и так можно сделать.
а все остальное селекторами делается.
сдвиг всегда можно сделать, с помощью найнпатч + контент паддинг
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38796330
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибстень и так можно сделать.
а все остальное селекторами делается.
сдвиг всегда можно сделать, с помощью найнпатч + контент паддинг
Хорошая мысль. Спасибо.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38796367
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибссдвиг всегда можно сделать, с помощью найнпатч + контент паддинг
Про найнпатч не понял правда. Пример бы какой.
Думал так:
1. рисуется две картинки под разные состояния кнопки, например обычное и кнопка нажата.
При этом для второго состояния кнопку рисуем со смещением вниз (тут пока неясно правда как сохранить изображение, чтобы сверху были прозрачные пикселы - они ж обрежутся походу при сохранении, (пробую делать в ксаре)).
2. при нажатии на кнопку селекторами устанавливаем нужное изображение

Кстати, все-таки если тень для текста на кнопке рисовать отдельно - тоже получится, что надо кучу изображений, для каждой кнопки со своей тенью для каждого текста кнопки, беда какая-то )
Видимо, тень от текста придется убрать.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38796487
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да. Вариант, про текст кнопки зашитый в картинку вообще отпадает конечно, т.к. если например, добавить локализацию на неск. языках, то картинок для кнопок надо будет чуть ли не 1000 )))
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38796652
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у drawable можно отступ сделать. либо, если задний фон картинка, то самому ее чуть сместить.

либо вообще в drawable посмотреть top, left

по поводу текста тут сложнее, стандартная кнопка, вроде как не умеет его двигаьт, если только самому не ловить момент нажатия и не сдвигать у текста позицию.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38796782
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибс , да с этим немного разобрался. Спасибо.
Еще поищу как менять шрифт и устанавливать тень на текст кнопки, что-то типа shadowRadius, видимо.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38797861
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пойму как в андроид студии добавить XML с селектором - ругается, что не знает такой тег selector
Код: xml
1.
2.
3.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
....


Пишет, что элемент selector должен быть объявлен
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38798155
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиНе пойму как в андроид студии добавить XML с селектором - ругается, что не знает такой тег selector
Код: xml
1.
2.
3.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
....



Пишет, что элемент selector должен быть объявлен
Смотря в какой папке создавать... Например, в res/drawable/ работает.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38801419
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanСмотря в какой папке создавать... Например, в res/drawable/ работает.
Спасибо. Хотя уже не ломается, но зато эффекта не видно:
Положил в папку drawable файл buttonsel.xml
Код: xml
1.
2.
3.
4.
5.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/btn2" android:state_pressed="true" />
    <item android:drawable="@drawable/btn_main" />
</selector>


На кнопке в background указал
Код: xml
1.
android:background="@drawable/buttonsel"


Но при нажатии на кнопку, ее фон не меняется, хотя изображения в btn2 и btn_main разные.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38801561
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полностью не пробовал над кнопкой поработать?
Код: java
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/button_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/button_focused"
          android:state_focused="true" />
    <item android:drawable="@drawable/button_default" />
</selector>
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38802854
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanПолностью не пробовал над кнопкой поработать?
Спасибо. Получилось. Правда.
В изначальном примере так до конца и не заработало - при получении фокуса подхватилась новая картинка, а при нажатии кнопки нет.
Создаю новые чистые проекты, там все нормально работает. Оставлю пока так.
Теперь интересно, как через селектор менять другие атрибуты, например пробую смещать текст paddingbottom-ом.
Создал в drawable по аналогии xml:
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:paddingbottom="0sp" android:state_pressed="true"/>
    <item android:paddingbottom="17sp" android:state_focused="true"/>
    <item android:paddingbottom="17sp"/>
</selector>


Но не выходит прописать в paddingbottom кнопки ссылку на этот селектор.
И выбрать дает только из значений в values\dimens.xml, но там селектор не катит.
Как-то менять на OnClick в коде? Но тогда нужно скорее всего, даже не просто OnClick, а два события:
1. кнопка нажалалась (и держится) - одно событие: сдвинули текст
2. кнопку отпустили: вернули текст обратно
Но есть ли такие события вообще.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803098
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это в drawable отдельном нужно делать, а в селекторе его и указывать потом
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803137
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибсэто в drawable отдельном нужно делать, а в селекторе его и указывать потом
Не понял что значит в отдельном drawable и как потом его указывать?
То есть надо создать отдельный селектор для paddingbottom (приведен выше), а потом в селекторе, который меняет фон, как-то прицепиться к селектору paddingbottom?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803190
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиграйся с атрибутами:
Код: xml
1.
2.
3.
4.
android:shadowColor="#444444"
android:shadowDx="4"
android:shadowDy="4"
android:shadowRadius="9"


На обычных кнопках именно на текст влияют.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803201
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanПоиграйся с атрибутами
Да. Это про тень от текста. Спасибо, красивенько.
Но текущий вопрос - это смещение текста кнопки при ее нажатии и возвращение на место, когда кнопку отпустили :)
Возможно, лучше было б отдельным топиком? )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803399
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиДжибсэто в drawable отдельном нужно делать, а в селекторе его и указывать потом
Не понял что значит в отдельном drawable и как потом его указывать?
То есть надо создать отдельный селектор для paddingbottom (приведен выше), а потом в селекторе, который меняет фон, как-то прицепиться к селектору paddingbottom?

<item android:drawable="@drawable/button_default" />

вот в этом
button_default , можно попробовать поиграться со смещениями.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803425
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибсвот в этом button_default , можно попробовать поиграться со смещениями.
Попробовал прописать так :)
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/b3" android:state_pressed="true" />
    <item android:drawable="@drawable/b2" android:state_focused="true" />
    <item android:drawable="@drawable/b1" android:paddingbottom="16sp" />
</selector>


Но ругается, что не видит атрибут paddingbottom.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803551
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиДжибсвот в этом button_default , можно попробовать поиграться со смещениями.
Попробовал прописать так :)
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/b3" android:state_pressed="true" />
    <item android:drawable="@drawable/b2" android:state_focused="true" />
    <item android:drawable="@drawable/b1" android:paddingbottom="16sp" />
</selector>



Но ругается, что не видит атрибут paddingbottom.

а с чего вдруг селектор должен знать про такие аттрибуты ?
я же тебе говорю, в конечном drawable это нужно делать у тебя это b1
если это картинка, то оберни ее в

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <bitmap          android:src="@drawable/b1"        />
	  <padding
                android:bottom="5dp"
                android:left="0dp"
                android:right="5dp"
                android:top="0dp" />
    </item>
</layer-list>



в общем? сам поиграйся со сдвигом/
возможно в начало списка придется добавить shape прямоугольник и ему задать padding
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803619
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибс, В drawable создал xml button_pressed:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <bitmap          android:src="@drawable/b3"        />
        <padding
            android:bottom="200dp"
            android:left="0dp"
            android:right="200dp"
            android:top="0dp" />
    </item>
</layer-list>


В селекторе указал этот xml:
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/[color=red]button_pressed[/color]" android:state_pressed="true" />
    <item android:drawable="@drawable/b2" android:state_focused="true" />
    <item android:drawable="@drawable/b1"/>
</selector>


Запускаю, жму на кнопку, а текст не прыгает, стоит на месте )
И вообще, это ж как можно додуматься, что картинку можно оформлять вот так в xml и потом прописывать имя этого xml в бэкграунд и оно будет работать? Вот как? ) (раньше версткой и хтмл разработкой не занимался правда, может это оттуда? или строго документация по разработке в андроид?)
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803642
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки, самый лучший источник информации по андроиду http://developer.android.com/intl/ru/index.html
Там и гайдлайны есть соответствующие.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803815
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки (раньше версткой и хтмл разработкой не занимался правда, может это оттуда? )

Ага - как бы не так - верстка андроида это вообще непонятная вещь и книг по обучению ей нет. Если в CSS я мог что угодно сделать - то в андроиде "надо чесать репу". Выделение кнопки при нажатии - это фигня. А вот как сделать утопленную кнопку - т.е. переключатель ввиде кнопки? В скрине только подложка в виде прозрачного PNG краев там и фона никакого нет и при нажатии кнопка реально "вжимается" - т.е. утопляется - это все нарисовано только на css без использования программного кода - вот как такое сотворить на андроиде?

Вот пожмякайте сами : https://www.aviba.ru/
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803845
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Микола Питерскийэто все нарисовано только на css без использования программного кода - вот как такое сотворить на андроиде?
Думаю, разместить рядом два ImageButton и при клике скриптом менять картинки на них.
То есть две кнопки, 4 картинки.
Правда до ImageButton не добрался еще )
И с паддингом так и неясно пока )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803862
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Микола Питерскийбез использования программного кода
Точно. Если без кода, то фиг знает )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803864
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки, если Гуру не покажут как это сделать - сам такое не сделаешь !!!
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803872
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиМикола Питерскийэто все нарисовано только на css без использования программного кода - вот как такое сотворить на андроиде?
Думаю, разместить рядом два ImageButton и при клике скриптом менять картинки на них.
То есть две кнопки, 4 картинки.

В показанном примере фоны, градиенты, закругленные края и 3d утопленной кнопки и выпуклой - это не изображения а возможности CSS, в прозрачном квадратном изображении только самолетик - все остальные "красивости" это не изображение.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803882
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот какая там картинка:
https://www.aviba.ru/images/vodnu_blue.png

остальное все не через картинку.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803888
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Микола Питерский , классно, понимаю негодование :)
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803890
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дались вам эти кнопки на css? Пользуйтесь тем, что предлагает андроид.

http://angrytools.com/android/button/
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803920
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, а можно ли WebView сделать прозрачным и можно ли из него отловить нажатие кнопки?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38803999
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Микола ПитерскийПрокнопки (раньше версткой и хтмл разработкой не занимался правда, может это оттуда? )

Ага - как бы не так - верстка андроида это вообще непонятная вещь и книг по обучению ей нет. Если в CSS я мог что угодно сделать - то в андроиде "надо чесать репу". Выделение кнопки при нажатии - это фигня. А вот как сделать утопленную кнопку - т.е. переключатель ввиде кнопки? В скрине только подложка в виде прозрачного PNG краев там и фона никакого нет и при нажатии кнопка реально "вжимается" - т.е. утопляется - это все нарисовано только на css без использования программного кода - вот как такое сотворить на андроиде?

Вот пожмякайте сами : https://www.aviba.ru/



хочешь расскажу ? )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804011
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиЗапускаю, жму на кнопку, а текст не прыгает, стоит на месте )
И вообще, это ж как можно додуматься, что картинку можно оформлять вот так в xml и потом прописывать имя этого xml в бэкграунд и оно будет работать? Вот как? ) (раньше версткой и хтмл разработкой не занимался правда, может это оттуда? или строго документация по разработке в андроид?)

текст и не будет.
если только программно его не сдвигать.

просто он в отличие от бекгроунда рисуется, можно сказать на канве.

есть варинт просто дополнить как нужно в своей реализации кнопки, переписав Draw метод
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804016
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джибс,

свою кнопку сделать проще, согласен.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804144
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибсесть варинт просто дополнить как нужно в своей реализации кнопки, переписав Draw метод
Только так и вообще никак? Эта пичаль. Его ж еще найти надо где-то этот Draw метод )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804283
Микола Питерский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДжибсМикола Питерскийпропущено...


Ага - как бы не так - верстка андроида это вообще непонятная вещь и книг по обучению ей нет. Если в CSS я мог что угодно сделать - то в андроиде "надо чесать репу". Выделение кнопки при нажатии - это фигня. А вот как сделать утопленную кнопку - т.е. переключатель ввиде кнопки? В скрине только подложка в виде прозрачного PNG краев там и фона никакого нет и при нажатии кнопка реально "вжимается" - т.е. утопляется - это все нарисовано только на css без использования программного кода - вот как такое сотворить на андроиде?

Вот пожмякайте сами : https://www.aviba.ru/



хочешь расскажу ? )

Очень хочу. И знаю что это можно сделать т.к. в андроиде есть все что есть в css - только надо уметь это "готовить".
И тут 2 пути: либо искать приложение, в котором есть такие красивости и смотреть как сделано, или получить подсказку от Гуру.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804405
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может у кнопки в андроиде есть событие/метод типа botton_pressed?
(дабы в коде текст кнопки подрыгать))
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804408
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиДжибсесть варинт просто дополнить как нужно в своей реализации кнопки, переписав Draw метод
Только так и вообще никак? Эта пичаль. Его ж еще найти надо где-то этот Draw метод )

х/з , в голову что то ничего не приходит.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804435
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиМожет у кнопки в андроиде есть событие/метод типа botton_pressed?
(дабы в коде текст кнопки подрыгать))
Как отлавливать тач и рисовать примерно показано тут 15495889
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38804584
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиМожет у кнопки в андроиде есть событие/метод типа botton_pressed?
(дабы в коде текст кнопки подрыгать))

не совсем так, там подход от дравейбл стейтов.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38806682
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanКак отлавливать тач и рисовать примерно показано тут
С дрыганьем текста получилось, большой спасиб.
Теперь вопросы такие возникли, к джаве относятся, возможно, но с ней тоже не делал ничего )

Кнопка и текст, понятное дело, растягиваются, на разных экранах будут выглядеть по-разному.
То есть надо задавать некое относительное смещение.
Как понимаю, в лоб, вычисляем высоту кнопки, высоту шрифта и от этого отталкиваться, задавая приемлемое смещение в %-тах?
Или можно обойтись без джава, а например, используя какие-то подходящие единицы измерение sp, dp или еще какие и как в Джава задать атрибут кнопки padding_bottom (пока нашел только .setPadding(,,,), но ест только Int похоже)?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38806699
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки,

если сам рисуешь, то и сам считаешь. Логично же.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38806706
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще.
То есть в методе OnCreate активити, по айди обращаюсь к кнопке, переопределяю метод OnTouchListener:
Код: java
1.
2.
3.
4.
5.
Button btn1 = (Button) findViewById(R.id.mybtn1);
btn1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
.....


Но пока не понял, почему внутри onTouch не могу обращаться к btn1, пока не объявлю ее как final.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38806713
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиИ еще.
То есть в методе OnCreate активити, по айди обращаюсь к кнопке, переопределяю метод OnTouchListener:
Код: java
1.
2.
3.
4.
5.
Button btn1 = (Button) findViewById(R.id.mybtn1);
btn1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
.....



Но пока не понял, почему внутри onTouch не могу обращаться к btn1, пока не объявлю ее как final.

во первых, все логично.

во вторых, зачем onTouch.
в третьих есть он click
и последнее всегда тебе передают View v

что равнозначно твоему btn1
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38806715
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanЕсли сам рисуешь, то и сам считаешь. Логично же.
Так-то да. Просто пока не очень осознаю ед. измерения какие для чего, думал, может есть некие относительные единицы, типа задал падингботтом 20sp и независимо от разрешения, растянутости кнопки он сам все посчитает в пикселах и нарисует красиво ).
А если считать самому, то придется и начальное положение тоже прорисовывать самому выходит, т.к. запомнить положение текста до нажатия у меня не получается пока (ну чтобы потом вернуть его на место, когда кнопку отпустили, с Джавой не очень дружен пока).
И еще придется перерисовывать тогда кнопки при ресайзе окна (перевороте экрана в частности). В общем какой-то геморрой )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38806717
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибс1. зачем onTouch. если есть он click?
2. последнее всегда тебе передают View, что равнозначно твоему btn1
(процитировал, как воспринял))
1. в онклик же не передается состояние нажата или отпущена - просто клик нет?
2. то есть вместо буттон лучше писать view при обращении к буттон по id типа все равно наследник? (или не понял, но не уверен, что так лучше)
3. про final так и не понял пока )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38806741
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПрокнопкиИ еще придется перерисовывать тогда кнопки при ресайзе окна (перевороте экрана в частности). В общем какой-то геморрой )
Хотя под переворот отдельный активити же делается, где прописывается все то же самое. Так?
Не нравится только дублирование кода. Это не норма по-моему.
По-хорошему, создать бы один раз класс кнопок с дрыгающимся текстом и потом втыкать его на формы...
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38810902
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы лучше понять, как посчитать, хотелось бы знать высоту кнопку и высоту шрифта.
Пишу просто:
Код: java
1.
btn1.setText(Integer.toString(btn1.getHeight()) + "/ " + Float.toString(btn1.getTextSize()));


Но getHeight дает 0 почему-то.
А может есть и проще спобы пофиксить относительное положение текста на кнопке независимо от того как кнопка растягивается и на каком разрешении экрана работает.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38810921
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиНо getHeight дает 0 почему-то.
Нужно знать, где вызывать: после создания всех вьюх, дернуть measure главной вьюхи (активити или фрагмент) и только тогда спрашивать размеры.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38810930
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanНужно знать, где вызывать: после создания всех вьюх, дернуть measure главной вьюхи (активити или фрагмент) и только тогда спрашивать размеры.
Вызываю в onCreate активити.
Что за метод measure пока не понял.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38810962
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38810975
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman , спасибо большое, получилось.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38811073
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще какая-то непонятка:
1. в onCreate активити вызываю measure кнопки.
Код: java
1.
btn1.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);


2. выставляю размер текста кнопки в процентном соотношении к высоте кнопки через setTextSize
типа:
Код: java
1.
btn1.setTextSize((int) (btn1.getMeasuredHeight()*0.25));


При этом текст кнопки становится огромным больше самой кнопки
3. Если же посмотреть что получается по цифрам:
Код: java
1.
btn1.setText(Integer.toString((int) btn1.getTextSize())+"/ "+Integer.toString((int) (btn1.getMeasuredHeight()*0.25)));


Выводит на кнопку 231/ 77
То есть в setTextSize выставляется 231, хотя по соотношению должно получиться 77. Как таг? )

Есть подозрение, что например setTextSize выставляет размер шрифта в одних единицах изм., а getTextSize выдает размер в других единицах. То есть в getTextSize выставили 77, а в getTextSize получим уже большую цифру. (и это подтверждается на практике, тупо забил 77 в setTextSize а getTextSize возвращает 231).

Вопрос , как бы задать размер шрифта, чтобы он соотносился с высотой кнопки? Например, 40% от текущей высоты кнопки? )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38811214
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
setTextSize выставляет значение в sp unit
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38811217
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предвидя твой следующий вопрос, да решение есть.

Код: sql
1.
2.
3.
 float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
 int  size =   (btn1.getMeasuredHeight()*0.25)/scaledDensity;
btn1.setTextSize(size );
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38811643
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибс , спасибо, теперь все получилось до конца.
Вот только сам код....
Пишу типа:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        btn1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    // кусок кода, форматирующий надпись на кнопке
                    ...
                } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    // точно такой же кусок кода, но со смещением
                    ...
                }
                return false;
            }
        });


То есть код дублируется и по-хорошему, создать бы отдельный метод внутри этого метода и вызвать его, давая на вход кнопку и смещение для надписи, но как в Java создавать методы внутри методов, если такое возможно, наверно надо создать отдельный класс, в нем нужные методы и их вызывать, это буду читать про джаву )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38811905
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
   btn1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    // кусок кода, форматирующий надпись на кнопке
                    my_super_method(0);
                } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    // точно такой же кусок кода, но со смещением
                    my_super_method(2);
                }
                return false;
            }

            private void my_super_method(int offset) 
            {
                  ....
             } 
        });
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812020
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибс , да. Это оказалось довольно просто. Спасибо.
Теперь бы создать некий класс активити, в котором переопределить метод onCreate (чтобы в нем по умолчанию форматировались все кнопки, которые есть на активити). И дальше уже в проекте создавать новые активити, наследуя их от этого с переопределенным onCreate, но не динамически в коде создавать конечно, а именно обычным способом.
То есть как не писать этот код в каждой активити да еще для каждой кнопки? )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812041
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки, а принципы ООП слабо использовать? То есть создать наследника кнопки и вставлять его уже в xml?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812102
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanТо есть создать наследника кнопки и вставлять его уже в xml?
Начинаю создавать подкласс в отдельном файле:
Код: java
1.
2.
...
public class MyButton extends Button {...


Но не пойму пока как переопределять методы?
То есть каждый метод базового класса Button имеет наверно какие-то свои вх.исх. параметры по умолчанию и при переопределении метода, надо их же упомянуть так? Если так, то как в студии найти некую спецификацию метода класса? Или все как-то проще?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812116
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиИли все как-то проще?
Нажать Alt+Insert?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812180
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanНажать Alt+Insert?
Вах, классно. Похоже, оно, хотя до конца не разобрался, но приложение скомпилировалось после
добавления через Alt+Ins строк
Код: java
1.
2.
3.
    MyButton(Context context) {
        super(context);
    }


Правда когда прописал в xml формы вместо Button MyButton:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        <MyButton
            android:layout_width="fill_parent"
            android:layout_height="62dp"
            android:text="New Button"
            android:id="@+id/button"
            android:background="@drawable/buttons_bgrnd"
            android:layout_weight="0.04"
            android:textStyle="bold"
            android:textSize="24dp"
            android:textColor="#c8ffffff"
            android:paddingBottom="20dp" />


Кнопка потеряла фон из селектора и приложение ломается при старте, хотя вроде и компилируется.
(сам класс создан в отдельном файле в папке java):
Код: 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.
package com.example.user.myapplication;

import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

class MyButton extends Button {
    MyButton(Context context) {
        super(context);
    }

    private void DrawWord(Float dlt){
        // перерисовка текста
    }

    public boolean onTouch(View v, MotionEvent event) {
       if (event.getAction() == MotionEvent.ACTION_DOWN) {
           DrawWord(...);
         } else if (event.getAction() == MotionEvent.ACTION_UP) {
           DrawWord(...);
         }
        return false;
        }
}



То есть xml не видит этот класс? или что?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812419
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки,

нужно прописывать полный "путь" до класса, с пакетами.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812852
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanнужно прописывать полный "путь" до класса, с пакетами.
Путь прописал, но теперь тупо ломается при запуске:
Класс кнопки MyButton (пока перерисовку убрал практически пустой):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
package com.example.user.myapplication;

import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

class MyButton extends Button {
    MyButton(Context context) {
        super(context);
    }
}


В активити прописал вместо Button
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
        <com.example.user.myapplication.MyButton
            android:layout_width="fill_parent"
            android:layout_height="62dp"
            android:text="New Button"
            android:id="@+id/button"
            android:background="@drawable/buttons_bgrnd"
            android:layout_weight="0.04"
            android:textStyle="bold"
            android:textSize="24dp"
            android:textColor="#c8ffffff"/>
...


Компилится, а на ADB не стартует ("К сожалению myapplication было остановлено")
Если в разметке вернуть обратно обынчую кнопку, то работает, то есть что-то не то с подклассом MyButton, а что неясно )
И полезно было бы наверно научиться понимать в чем причина ибо сейчас только тыком, но ведь пишутся же логи типа:
Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
at java.lang.Class.getConstructorOrMethod(Class.java:472)
at java.lang.Class.getConstructor(Class.java:446)
at android.view.LayoutInflater.createView(LayoutInflater.java:568)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
            at android.app.Activity.setContentView(Activity.java:1929)
            at com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:21)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

Но как по ним понять в чем причина ошибки...
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38812911
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что у тебя там

at com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:21)
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38813155
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибсчто у тебя там
at com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:21)
Там onCreate активити:
Код: 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.
package com.example.user.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}


В частности по ctrl+g ->21 встает на камент
Код: java
1.
// Inflate the menu; this adds items to the action bar if it is present.



Вот полный лог
автор11-21 10:34:04.203 1248-1248/com.example.user.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.user.myapplication, PID: 1248
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.myapplication/com.example.user.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #17: Error inflating class com.example.user.myapplication.MyButton
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class com.example.user.myapplication.MyButton
at android.view.LayoutInflater.createView(LayoutInflater.java:603)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
at android.app.Activity.setContentView(Activity.java:1929)
at com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:21)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
at java.lang.Class.getConstructorOrMethod(Class.java:472)
at java.lang.Class.getConstructor(Class.java:446)
at android.view.LayoutInflater.createView(LayoutInflater.java:568)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
            at android.app.Activity.setContentView(Activity.java:1929)
            at com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:21)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

И в нем не нравится вот это:
Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class com.example.user.myapplication.MyButton
Оно? Ошибка надувания класса? ))) И что не так? ) Может надо как-то инициализировать в основной форме этот подкласс MyButton?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38813171
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вообще
Код: java
1.
 at com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:21) 


показывает на
Код: java
1.
setContentView(R.layout.activity_main);
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38813182
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь примеры разных кнопок посмотреть https://github.com/search?utf8=?&q=android button
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38813931
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем, судя по ошибке, данный конструктор отсутствует.

public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);

}
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38814908
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторМожешь примеры разных кнопок посмотреть
Спасибо, интересно и полезно, посмотрю.
Джибсвообщем, судя по ошибке, данный конструктор отсутствует.
Конструктор добавил по Alt+Ins, второй вариант (с первым не работало, со вторым заработало, но только на одной машине, на второй пока никак, падает точно так же).
То есть, не могу даже создать просто подкласс для Button, в котором в OnCreate записать свой код и переопределить метод onTouch. В коде основной активити получается переопределить методы кнопок, а создать отдельный подкласс кнопки с уже переопределенными методами и потом просто вставлять его в разметку как-то не очень. Не ясно как переопределять методы, т.к. не достать их спецификацию да и вообще надо джаву повтыкать конечно.
Пишу так:
Код: 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.
package com.example.user.myapplication;

import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

class MyButton extends Button {
    MyButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    protected void DrawWord(Float dlt){
        // что-то там рисуем
    }

    protected void onCreate(Bundle savedInstanceState) {
        // определяем размер шрифта и выставляем через setTextSize

        setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    DrawWord((float) 0);
                    return true;
                } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    DrawWord((float) 0.3);
                    return true;
                }
                return false;
            }
        });
    }
}


Компилится, но при старте ругается на строку
setContentView(R.layout.activity_main);
в onCreate основной активити.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38814933
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки, ух ты как нарисовал-то... Я создал класс и через Alt+Ins достал onTouchEvent. Зачем тут еще листенер?

Код: 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.
package ru.wadman;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;

/**
 * Created by wadman on 24.11.2014.
 */
public class MyButton extends Button {
    public MyButton(Context context) {
        super(context);
    }

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr);
    }
}

...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38815248
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman , не очень понимаю видимо, про лисеннеры, а так да заработало почти.
По Alt+Ins действительно, там можно найти нужные шаблоны спецификаций методов и т.п. Удобно, спасибо.
Непонятно только зачем столько перегрузок конструктора для того же Button достаточно же одного или это для разных версий API?
И каким образом из них можно выбрать нужный тебе или надо автоматом писать все? (но тогда ведь фиг поймешь сходу, в какой из них писать свой код)
И еще снова селектор бэкграунда перестал теперь работать )
Буквы скачут, а фон не меняется, хотя в селекторе ничего не менял )
Класс кнопки:
Код: 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.
package com.example.user.myapplication;

import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;

public class MyButton extends Button {
    public MyButton(Context context, AttributeSet attrs) {
        //  первоначально перерисовываем текст кнопки
    }

    protected void DrawWord(Float dlt){
        // перерисовываем текст кнопки
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
          DrawWord((float) 0);
          return true;
        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
          DrawWord((float) 0.3);
         return true;
       }
       return super.onTouchEvent(event);
    }
}


Наверно что-то не то с onTouchEvent, раньше, когда фон кнопки перерисовывался селектором в onTouchEvent я возвращал False, сейчас же, чтобы текст "прыгал" приходится возвращать true, хотя и если false возвращать, то фон все равно не меняется, а текст при этом начинает "прыгать" криво )
Пробовал еще не селектором, а сразу в onTouchEvent выставлять setBackgrouund, но неясно как туда прописать имя ресурса:
setBackground(R.drawable.button_pressed);
setBackground(drawable.button_pressed);
ни в кавычках никак не лезет, и по хинту непонятно что писать, при старте ругается, типа не может преобразовать
int в Drawable, хотя в примерах Android так и пишут:
layout.setBackgroundResource(R.drawable.ready);
Или есть некий тип Drawable, типа канвы, на которой надо что-то нарисовать или указать ресус, а потому уже этот Drawable засунуть в setBackground?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38815263
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиИ каким образом из них можно выбрать нужный тебе или надо автоматом писать все? (но тогда ведь фиг поймешь сходу, в какой из них писать свой код)
Не понятно, зачем в данном случае вообще переписывать конструктор? Но делается обычно это так:
Код: 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.
public class MyButton extends Button {

    public MyButton(Context context) {
        this(context, null);
    }

    public MyButton(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.buttonStyle);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        this(context, attrs, defStyleAttr, 0);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }

}



И все таки, сходи на гитхаб. Посмотри как другие делают. Теоретизировать можно бесконечно.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38815373
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanНе понятно, зачем в данном случае вообще переписывать конструктор? Но делается обычно это так.
1. конструктор это же код, который создает сам объект класса в памяти так? значит вроде как, чтобы сразу при создании сделать то, что хотелось бы сделать при создании, в данном случае отрисовать. или это в какое другое событие лучше засунуть?
2. насчет делается обычно это так все равно неясно зачем столько раз
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public MyButton(Context context) {
        this(context, null);
    }

    public MyButton(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.buttonStyle);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        this(context, attrs, defStyleAttr, 0);
    }

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr);
    }

Это же один конструктор, написанный в разных вариантах типа перегрузка? Если предположить, что отрисовку надо делать в конструкторе (во всяком случае, она там работает), то как тогда определить в каком именно из возможных вариантов
public MyButton(..... надо ее писать?
Конечно, еще поковыряю те примеры.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38815396
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопкиили это в какое другое событие лучше засунуть?
1. Отрисоваться кнопка должна по запросу системы
2. В он тач нельзя отрисовывать, нужно лишь менять состояние (нажата, отжата, хотя по идее кнопка и так должна это отслеживать, но скорее всего в привате).
3. Есть обработчик для отрисовки... Ты видимо не то что на гитхаб не сходил, но и это пропустил 15495889
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38817541
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman1. Отрисоваться кнопка должна по запросу системы
2. В он тач нельзя отрисовывать, нужно лишь менять состояние (нажата, отжата, хотя по идее кнопка и так должна это отслеживать, но скорее всего в привате).
3. Есть обработчик для отрисовки... Ты видимо не то что на гитхаб не сходил, но и это пропустил
2, 3. конечно ссылку смотрел, но имею в виду не отрисовку непосредственно на канве, а в частности подмену бэкграунда кнопки по селектору и с этим вроде бы получилось, но только методом тыка.
Если, условно, пишем так в MyButton:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
            return true;
        }
        return super.onTouchEvent(event);
    }


То селектор не отрабатывает, переписал так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            return super.onTouchEvent(event);
        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
            return super.onTouchEvent(event);
        }
        return super.onTouchEvent(event);
    }

селектор заработал.

Так и не пойму правда, как вызывать метод кнопки setBackground, что туда передавать, в примерах, как писал выше передают строку-ссылку на ресурс например, а реально в коде не дает так делать или тоже не там вызываю.

А масштабирование текста его да, все же засунул в onDraw - здесь хотя бы уже по канвасу можно определить размеры кнопки, как понимаю.

И еще интересно где найти вывод System.out.print? Хотя может он и не нужен особо, дебаг в студии вполне удобный конечно.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38817580
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПрокнопкиА масштабирование текста его да, все же засунул в onDraw - здесь хотя бы уже по канвасу можно определить размеры кнопки, как понимаю.
Ага. Фиг там. Масштабирование он в onDraw засунул )
Картина получается, при вызове в onDraw setpadding, тот в свою очередь, похоже снова вызывает ведь onDraw.
Засада какая-то в общем )
Как бы масштабирование-то текста кнопки прописать? )
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38817618
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписал с флагом, чтобы вызов проходил только один раз как бы (но ощущение, что это решение через ж..у):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class MyButton extends Button {
    private int is_first_draw = 1;
    ......
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (is_first_draw == 1) {
            ....
            setPadding(....); // эта гадина снова вызывает onDraw
            is_first_draw = 0; // поэтому сбрасываем флаг, чтобы в следующий вызов сюда не попасть
        } else {is_first_draw = 1; // снова выставляем, чтобы в след раз попасть на setPadding )
                  } 
    }
}
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38817669
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем-то, можно было и готовые решения посмотреть

http://stackoverflow.com/questions/7676986/how-to-move-buttons-text-when-state-is-pressed
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38817834
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибс , вот оно! setBackgroundResource!
Кто ж знает как найти именно этот готовый пример, даже гуглом не умею пользоваться )
Спасибо.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38817836
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибс , кстати в этом примере нет масштабирования смещения с фиксом-то понятно, что можно сразу в онтач все засунуть, а если с масштаированием, то как понимаю, все же тока в onDraw с вытекающими нюансами?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38818095
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С масштабированием возникает еще засада.
Если как сейчас масштабировать только по вертикали (типа чтобы текст был всегда по высоте например 0.3 от высоты кнопки),
то если кнопка например ближе к квадратной, а надпись достаточно длинная, то отмасштабировав надпись по высоте, получим, что она вылезет за края кнопки по горизонтали, то есть надо еще масштабировать по длине и вопрос тогда:

Как определить ширину надписи на кнопке? (будем считать, что текст на кнопке в любом случае пишем в одну строку).
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38818141
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрокнопкиКак определить ширину надписи на кнопке? (будем считать, что текст на кнопке в любом случае пишем в одну строку).

в объекте Paint смотри

вроде там есть
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38818223
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще интересное поведение.
Если вообще убрать setPadding из onDraw, а только переключать изображения в onTouchEvent через setBackgroundResource,
то setPadding все равно каким-то чудом отрабатывает при нажатии.
Если же setPadding прописать, то получается, что текст скачет некрасиво - сначала он смещается по некоему автоматическому падингу, а потом прыгает на то место, которое прописано в setPadding в коде кнопки.
Что за автоматическое изменение падинга при нажатии?
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38818833
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего не понял.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38818903
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Джибсничего не понял.
По порядку:
1. переписали обработчик, который через setPadding смещает текст при нажатии кнопки
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            setPadding(...);
            return super.onTouchEvent(event);
        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
            setPadding(...);
            return super.onTouchEvent(event);
        }
        return super.onTouchEvent(event);
    }


2. Смотрим за поведением и видим, что при нажатии на кнопку, текст сначала прыгает в одно место, а потом другое (еле заметно, если координаты примерно совпадают), появляется подозрение, что текст кто-то дергает и без onTouchEvent, поэтому убираем этот onTouchEvent, то есть остается только setBackgroundDrawble для смены фона кнопки.

3. Запускаем, жмем и о чудо - текст при нажатии сам прыгает практически как надо. Не понятно, но пока оставил так.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38819322
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще интересно, есть ли в горизонтальном лэйауте возможность уменьшить расстояние между находящимися в нем view?
В частности, чтобы две кнопки например были бы всегда очень плотно "прилеплены" друг к другу торцами.
И следующий вопрос все то же самое, но если торцы не строго прямоугольной формы и дополняют друг друга (типа у одной кнопки выпуклый торец, у другой впуклый))
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38819366
Прокнопки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По пред. вопросу, так понял, что зависит от самой фоновой картинки - если фон простой, то и слепить кнопки не проблема вообще.
Если же торцы картинки/кнопки сложной формы, то немного сложнее, но и фиг с ним, обойдемся пока.
...
Рейтинг: 0 / 0
Наложение изображений в кнопках
    #38819462
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прокнопки3. Запускаем, жмем и о чудо - текст при нажатии сам прыгает практически как надо. Не понятно, но пока оставил так.

чудес не бывает )
...
Рейтинг: 0 / 0
92 сообщений из 92, показаны все 4 страниц
Форумы / Android [игнор отключен] [закрыт для гостей] / Наложение изображений в кнопках
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]