Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Valakin
432 / 98 / 15
Регистрация: 21.02.2015
Сообщений: 740
1

Touch – обработка касания

02.02.2016, 15:38. Просмотров 1030. Ответов 5
Метки нет (Все метки)

Задача - чтобы после прикосновения уменьшался шрифт до тех пор пока не будет поднят палец.
Если ли другие варианты, кроме как написать второй поток и из него в бесконечном цикле все это делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2016, 15:38
Ответы с готовыми решениями:

Обработка касания touch
Всем привет, я пытаюсь оброботать на картинке нажатие на найденный предмет по...

Обработка касания(провести пальцем)
Нужно реализовать следующее: например, веду пальцем по линии, и при достижении...

Как создать обработчик касания в игре?
Ниже приведён код игры PingPong, вверху ракетка противника(ИИ), а внизу ракетка...

Проверка касания экрана в любом месте
Здравствуйте! Вопрос такой, как можно реализовать проверку условия касания...

Слушатель для события касания по тексту
Подскажите пожалуйста как создать обработчик события касания по разному тексту?...

5
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
02.02.2016, 15:52 2
Valakin, в смысле, какой второй поток? Вы же в интерфейсе всё делаете. Поэтому это UI-поток. Там и меняете. Тормозить будет в любом случае. И почему это цикл бесконечный? Если вы делаете для TextView, то достаточно доли секунды, чтобы шрифт уменьшился до нуля.
0
Valakin
432 / 98 / 15
Регистрация: 21.02.2015
Сообщений: 740
02.02.2016, 16:20  [ТС] 3
Цитата Сообщение от CoolMind Посмотреть сообщение
Там и меняете
менять надо не один раз, а постепенно, пока пользователь не уберет палец,
как бы вы реализовали?
вопрос больше не к размеру шрифта (можно например переменную уменьшать на процент),
а к работе кода
0
CoolMind
422 / 404 / 66
Регистрация: 06.10.2012
Сообщений: 1,732
02.02.2016, 16:43 4
Лучший ответ Сообщение было отмечено Valakin как решение

Решение

Valakin, нужно определить область, нажатие на которой вызывает событие. Дальше переопределить метод onTouch, например, как в http://startandroid.ru/ru/uroki/vse-...botka-kasanija. Я использовал для этой цели ImageView. В функции вам потребуется обрабатывать такие действия: MotionEvent.ACTION_DOWN, MotionEvent.ACTION_UP и MotionEvent.ACTION_CANCEL. Соответственно, при нажатии пальца возникает ACTION_DOWN, при отпускании - ACTION_UP. В блоке ACTION_DOWN вам нужно, например, брать текущее время и сравнивать с тем, когда последний раз меняли шрифт. В ACTION_UP таймер можно опять занулять. Дальше вычисляете, сколько прошло времени с момента последнего изменения. Например, прошло 100 мс, можно уменьшить шрифт на 0.2. Меняете у всех нужных компонентов шрифт, меняете время последнего изменения. Если хотите, могу попробовать код написать.
1
Valakin
432 / 98 / 15
Регистрация: 21.02.2015
Сообщений: 740
02.02.2016, 16:52  [ТС] 5
спасибо, но я явно плохо объясняю,
работать должно только от одного прикосновения, то есть ACTION_DOWN будет всего один раз
и пока палец не поднят постепенно уменьшается переменная которая задает размер
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,581
Завершенные тесты: 1
02.02.2016, 17:05 6
Лучший ответ Сообщение было отмечено Valakin как решение

Решение

боже, та шо там писать тот второй поток, создаем где-то в активити что-то типа
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
    private final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
 
    private final View.OnTouchListener listener = new View.OnTouchListener() {
        private ScheduledFuture<?> future;
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    future = service.scheduleAtFixedRate(task, 0, 200, TimeUnit.MILLISECONDS);
                    break;
                case MotionEvent.ACTION_UP:
                    future.cancel(true);
                    break;
            }
            return true;
        }
    };
 
    private final Runnable task = new Runnable() {
        private final Handler handler = new Handler(Looper.getMainLooper());
 
        @Override
        public void run() {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textView.getTextSize() - 1);
                }
            });
        }
    };
и вешаем OnTouchListener на нужное нам textView
PROFIT
0
02.02.2016, 17:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2016, 17:05

Эмуляция касания и движения пальца по экрану
Здравствуйте, подскажите пожалуйста на примере, как сделать такую эмуляцию -...

listview и touch
Доброго дня. Нужно дополнить нажатия на listview - то есть при длинном нажатии...

Canvas, SurfaceView, Touch
Всем добра. Возник один баг (может в коде проблема), который неприятно...


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

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

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