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

Определить область касания и чувствительность (тачпад на экране) - Android

Восстановить пароль Регистрация
 
Turalll
-1 / 2 / 0
Регистрация: 03.06.2010
Сообщений: 89
18.06.2016, 23:25     Определить область касания и чувствительность (тачпад на экране) #1
есть на сцене спрайт , который можно двигать касанием по нему. Хочу внизу экрана определить область , касаясь которой, я смогу двигать этот спрайт. В общем типо точпада на экране. Пробую делать это средствами движка andengine , но мои поиски не привели ни к одному методу в этом движке , с помощью которого я хотя бы смог бы кликнуть на спрайт нажатием на указанную область.. подскажите какие методы помогут это реализовать.

Добавлено через 6 часов 1 минуту
дополню вопрос. вот пример https://gyazo.com/39b76d3e992dba4c369f428c9459c8a1 этот смайл должен двигаться , когда я буду перемещать палец по этой черной области (типо тачпад на экране) . Пробовал возможности движка andengine и ничего готового не нашел, везде нужно прикоснуться к самому спрайту. Как под себя переделать аналоговое управление джостиком, который в движке andengine я тоже не понял, дошел до того, что там надо менять всю конструкцию метода. Решил самому написать всё это. Следующее, что нашел на просторах интернета, это Canvas. Сделал всё как тут https://habrahabr.ru/sandbox/27511/. на экране есть этот смайл , который перерисовывается там где я кликну. Вот тут я получаю координаты касания
Java
1
2
3
4
5
6
7
public boolean onTouchEvent(MotionEvent event) { 
            if(event.getAction() == MotionEvent.ACTION_DOWN) { 
                touchX = event.getX(); 
                touchY = event.getY(); 
                invalidate(); } 
            return true; 
        }
и перерисовываю смайл в новых координатах.
Но мне нужно , чтобы касания отлавливались только в определенной области экрана и далее я их буду подставлять и без invalidate() (пока не пробовал без него рисовать) перерисовывать этот смайл, только придется как то корректировать эти координаты. Ведь нужно подставлять не сами координаты , а изменение координаты. Т.е. нажал на область тачпад и начинаю двигать пальцем и будет отслеживаться разница между координатами и непрерывно передаваться для рисования . буду прибавлять к имеющимся координатам смайла эту разницу , а n-кратное увеличение или уменьшение этих координат позволит регулировать чувствительность тачпада. И еще решается такая проблема, которую я видел в начале, если коснуться смайлика пальцем и двигать его то смайлик начинает отставать от пальца, не достаточно быстро перерисовывается что ли..

Так вот нужна помощь с тем, чтобы определить область с которой считываются координаты касания, вернее изменения этой координаты от точки касания по движению. Спасибо, буду рад любому указанию к нужным методам и способам. или же может кто посоветует более разумный или эффективный способ реализации моей задачи.

Добавлено через 4 часа 0 минут
оказалось всё не так то и тяжело. правда я еще не сделал чтобы клики ловились в определенной области. но уже прогресс. при нажатии на любую область экрана этот смайл начинает двигаться и повторять мои движения, но если поставить курсор на смайл и начать двигаться, чтобы заметить насколько отрисовка его отстает от движения курсора , то заметно , что это отставание создает дискомфорт. вот кусок кода
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
@Override
        protected void onDraw(Canvas canvas) {
            // код рисующий графику
            Bitmap mybitmap = BitmapFactory.decodeResource(getResources(),R.drawable.face_box);
            // рисуем myBitmap на канве в координатах 10, 10
            canvas.drawBitmap(mybitmap, touchX, touchY, null);
 
        }
 
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    korX = touchX;
                    korY = touchY;
                    initX = event.getRawX();
                    initY = event.getRawY();
                   return true;
                case MotionEvent.ACTION_MOVE:
                    touchX = korX + (int) (event.getRawX() - initX);
                    touchY = korY + (int) (event.getRawY() - initY);
                    invalidate();
                return true;
            }
            return false;
        }
touchX и touchY это новые координаты, по которым метод invalidate() перерисовывает этот смайл, вот только медленно это происходит. как же это ускорить, какими способами рисовать?
Замечу что метод onTouch в котором реализовано и то что я сделал и вообще в нем реализуется касание по объекту и последующее его перемещение создает это отставание в прорисовке ( я так думаю) , потому что это отставание наблюдается везде где он используется. GestureDetector может имеет другую реализацию, попробую его использовать.. а что вы предложите ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2016, 23:25     Определить область касания и чувствительность (тачпад на экране)
Посмотрите здесь:

Динамические объекты на экране Android
Обработка касания(провести пальцем) Android
Элемент не позиционируется на экране Android
Вывод часов на экране блокировки Android
Слушатель для события касания по тексту Android
Как создать обработчик касания в игре? Android
Android Не срабатывает кнопка на втором экране
Закрепить элементы на экране Android
Android Обработка касания touch
Android Touch – обработка касания
Android Чувствительность MotionEvent.ACTION_MOVE
Проверка касания экрана в любом месте Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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