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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
HansKase
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 10
#1

Обработка MotionEvent - Android

09.04.2013, 23:03. Просмотров 1899. Ответов 8
Метки нет (Все метки)

Пишу пытаюсь писать калькулятор. Имеются дцать кнопок для ввода. По три значения на каждую кнопку (тач, свайп вверх, свайп вниз) для быстрого ввода цифр, функций и т.д.

Слушатель реализован так:

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
    int prevX, prevY, nextX, nextY;
    String expression = edInput.getText().toString();
    int cursorPosition = edInput.getSelectionEnd();
 
    public boolean onTouch(View view, MotionEvent event) {
        String inputText = "";
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            prevX = (int) event.getX();
            prevY = (int) event.getY(); 
            break;
        case MotionEvent.ACTION_UP:
            nextX = (int) event.getX();
            nextY = (int) event.getY();
            if (prevX < nextX && prevY > nextY) {
                inputText = "up-swype";
            } else
                if (prevX < nextX && prevY < nextY) {
                inputText = "down-swype";
                } else
                    inputText = "touch";
        
            
            edInput.setText(expression.substring(0, cursorPosition) + inputText + expression.subSequence(cursorPosition, expression.length())); 
            edInput.setSelection(++cursorPosition);
        }           
        return true;
    }

Подскажите, как лучше назначить всем кнопкам слушателя.
Можно ли как-то вызывать onTouch(View view, MotionEvent event) (что передавать в event)?
Таким способом получается громоздко, кнопок много

Java
1
2
bt4 = (Button) findViewById(R.id.bt4);
bt4.setOnTouchListener(this);

Насколько я знаю, слушателя можно установить в layout'е, но только с одним параметром View. На onTouch(View view, MotionEvent event) ругается матюками.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.04.2013, 23:08     Обработка MotionEvent #2
Цитата Сообщение от HansKase Посмотреть сообщение
На onTouch(View view, MotionEvent event) ругается матюками.
какими?
HansKase
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 10
09.04.2013, 23:11  [ТС]     Обработка MotionEvent #3
Цитата Сообщение от V0v1k Посмотреть сообщение
какими?
Could not find a method onTouch(View) in the activity class.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.04.2013, 23:14     Обработка MotionEvent #4
Таким способом получается громоздко, кнопок много
можно циклом layout.getChildAt(int index)

Добавлено через 1 минуту
Цитата Сообщение от HansKase Посмотреть сообщение
Could not find a method onTouch(View) in the activity class.
правильно, нет метода onTouch в активити, есть только onTouchEvent(MotionEvent event)

Добавлено через 27 секунд
а у вас что все кнопки выполняют одно действие?
HansKase
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 10
09.04.2013, 23:15  [ТС]     Обработка MotionEvent #5
Цитата Сообщение от V0v1k Посмотреть сообщение
правильно, нет метода onTouch в активити, есть только onTouchEvent(MotionEvent event)
onTouchEvent(View view, MotionEvent event) нет, есть onTouch(View view, MotionEvent event).

Цитата Сообщение от V0v1k Посмотреть сообщение
а у вас что все кнопки выполняют одно действие?
Нет, кнопки выполняют разные действия, код для примера привёл.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.04.2013, 23:22     Обработка MotionEvent #6
Цитата Сообщение от HansKase Посмотреть сообщение
onTouchEvent(View view, MotionEvent event) нет, есть onTouch(View view, MotionEvent event).
нет, в активити есть только onTouchEvent (MotionEvent event)
HansKase
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 10
09.04.2013, 23:28  [ТС]     Обработка MotionEvent #7
Цитата Сообщение от V0v1k Посмотреть сообщение
а зачем им тогда один обработчик?
Надеюсь поймёте, что я имел ввиду

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
        int prevX, prevY, nextX, nextY;
        String expression = edInput.getText().toString();
        int cursorPosition = edInput.getSelectionEnd();
 
        public boolean onTouch(View view, MotionEvent event) {
        String inputText = "";
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            prevX = (int) event.getX();
            prevY = (int) event.getY(); 
            break;
        case MotionEvent.ACTION_UP:
            nextX = (int) event.getX();
            nextY = (int) event.getY();
            if (prevX < nextX && prevY > nextY) {
                switch (view.getId()) {
                case R.id.bt4:
                    inputText = "sin()";
                case R.id.bt5:
                    inputText = "tn()";
                case R.id.bt6:
                    inputText = "^";
                }
            } else
                if (prevX < nextX && prevY < nextY) {
                    switch (view.getId()) {
                    case R.id.bt4:
                        inputText = "cos()";
                    case R.id.bt5:
                        inputText = "ctn()";
                    case R.id.bt6:
                        inputText = "^2";
                    }
                } else
                    inputText = view.getTag().toString(); // "touch"
        
            
            edInput.setText(expression.substring(0, cursorPosition) + inputText + expression.subSequence(cursorPosition, expression.length())); 
            edInput.setSelection(++cursorPosition);
        }           
        return true;
    }
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.04.2013, 23:29     Обработка MotionEvent #8
да уже понял.

Добавлено через 1 минуту
просто сделайте циклом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 23:30     Обработка MotionEvent
Еще ссылки по теме:

Обработка перемещения объекта на экране - MotionEvent.ACTION_MOVE Android
Обработка Json Android
Обработка включения Bluetooth Android
Android Чувствительность MotionEvent.ACTION_MOVE
Android Обработка смс

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

Или воспользуйтесь поиском по форуму:
HansKase
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 10
09.04.2013, 23:30  [ТС]     Обработка MotionEvent #9
Цитата Сообщение от V0v1k Посмотреть сообщение
да уже понял.
Вот у меня и не получается назначить всем кнопкам этот метод.
Цитата Сообщение от V0v1k Посмотреть сообщение
просто сделайте циклом.
Спасибо, попробую.
Yandex
Объявления
09.04.2013, 23:30     Обработка MotionEvent
Ответ Создать тему
Опции темы

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