Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Обработка перемещения объекта на экране - MotionEvent.ACTION_MOVE - Программирование Android
Когда перемещаю картинку к краю экрана, то её размер уменьшается, а после совсем исчезает. Нужно сохранять размер постоянным. Как? ...

Чувствительность MotionEvent.ACTION_MOVE - Программирование Android
Здравствуйте! В SurfaceView сделал тайлы, у них нужно обрабатывать нажатия и перемещение. Проблема в том, что MOVE слишком чувствителен и...

Задержка отрисовки Canvas. MotionEvent - Программирование Android
Здравствуйте. Написал простейшую программу рисующую жёлтую точку при касании экрана. Как только начинаю водить пальцем, точка начинает...

OnTouch MotionEvent в андроид выполняется только один раз - Программирование Android
Так вот сам вопрос: MotionEvent.ACTION_UP выполняется только первый раз, что при использовании if, что case. Кликаем по копке звук...

Обработка события Click, вставка html после генерации и обработка этого кода - jQuery
Подскажите пожалуйста как заставить работать эту часть кода 18 строка $(&quot;.image&quot;).click(function() { alert (1); ...

Обработка одномерных массивов и Обработка двухмерных массивов. - Visual Basic
Всем привет, У меня большие проблемы... нужно сделать 2 лабораторные работы по информатике, но я ничегошеньки в VB не понимаю... ...

8
V0v1k
1159 / 983 / 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
1159 / 983 / 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
1159 / 983 / 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
1159 / 983 / 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.7 - 1С
есть конфигурация на базе УТ. при проведении инвентаризации какой-нибудь группы товаров, производят заполнение ТЧ этой группой, но по...

Обработка - 1С
Во вкладке &quot; Выбранные поля&quot; в столбце &quot;Наименование&quot; выводит контрагент,договор и контейнерная площадка. К ним я добавил Ответственный....

обработка - C++ Qt
добрые вечер! подскажите как провернуть: идет показ картинок и пользователь должен выбрать 1 из 3-х предложенных вариантов... показ...

Обработка 1с 8 - 1С
Собственно проблема-то не в системе, а в мозге :) На форме обработки имеется таблица, поля таблицы описаны в тексте обработки...


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

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

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