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

Обработка MotionEvent - Программирование Android

09.04.2013, 23:03. Просмотров 2027. Ответов 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) ругается матюками.
http://www.cyberforum.ru/android-dev/thread1154799.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 23:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обработка MotionEvent (Программирование Android):

Чувствительность MotionEvent.ACTION_MOVE
Здравствуйте! В SurfaceView сделал тайлы, у них нужно обрабатывать нажатия и...

Задержка отрисовки Canvas. MotionEvent
Здравствуйте. Написал простейшую программу рисующую жёлтую точку при касании...

OnTouch MotionEvent в андроид выполняется только один раз
Так вот сам вопрос: MotionEvent.ACTION_UP выполняется только первый раз, что...

Обработка события Click, вставка html после генерации и обработка этого кода
Подскажите пожалуйста как заставить работать эту часть кода 18 строка ...

Обработка одномерных массивов и Обработка двухмерных массивов.
Всем привет, У меня большие проблемы... нужно сделать 2 лабораторные работы...

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

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

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

Цитата Сообщение от V0v1k Посмотреть сообщение
а у вас что все кнопки выполняют одно действие?
Нет, кнопки выполняют разные действия, код для примера привёл.
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.04.2013, 23:22 #6
Цитата Сообщение от HansKase Посмотреть сообщение
onTouchEvent(View view, MotionEvent event) нет, есть onTouch(View view, MotionEvent event).
нет, в активити есть только onTouchEvent (MotionEvent event)
0
HansKase
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 10
09.04.2013, 23:28  [ТС] #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;
    }
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
09.04.2013, 23:29 #8
да уже понял.

Добавлено через 1 минуту
просто сделайте циклом.
0
HansKase
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 10
09.04.2013, 23:30  [ТС] #9
Цитата Сообщение от V0v1k Посмотреть сообщение
да уже понял.
Вот у меня и не получается назначить всем кнопкам этот метод.
Цитата Сообщение от V0v1k Посмотреть сообщение
просто сделайте циклом.
Спасибо, попробую.
0
09.04.2013, 23:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 23:30
Привет! Вот еще темы с решениями:

Обработка на 7
Здравствуйте, написал простенькую обработочку для 8, теперь столкнулся что мне...

обработка
добрые вечер! подскажите как провернуть: идет показ картинок и пользователь...

Обработка на 1С
Привет всем! У меня такая ситуация: Отчетность ведут на 2.0 с 2004 года 60...

Обработка
Здравствуйте. Есть две обработки сделанные на 8.0, помогите переделать их на...


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

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

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