powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Наложение изображений в кнопках
17 сообщений из 92, страница 4 из 4
Наложение изображений в кнопках
    #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
17 сообщений из 92, страница 4 из 4
Форумы / Android [игнор отключен] [закрыт для гостей] / Наложение изображений в кнопках
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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