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

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

Войти
Регистрация
Восстановить пароль
 
Turalll
-1 / 2 / 0
Регистрация: 03.06.2010
Сообщений: 91
#1

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

18.06.2016, 23:25. Просмотров 344. Ответов 0
Метки нет (Все метки)

есть на сцене спрайт , который можно двигать касанием по нему. Хочу внизу экрана определить область , касаясь которой, я смогу двигать этот спрайт. В общем типо точпада на экране. Пробую делать это средствами движка 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     Определить область касания и чувствительность (тачпад на экране)
Посмотрите здесь:

Обработка касания touch - Программирование Android
Всем привет, я пытаюсь оброботать на картинке нажатие на найденный предмет по координатом через метод onTouch(View v, MotionEvent...

Touch – обработка касания - Программирование Android
Задача - чтобы после прикосновения уменьшался шрифт до тех пор пока не будет поднят палец. Если ли другие варианты, кроме как написать...

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

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

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

Слушатель для события касания по тексту - Программирование Android
Подскажите пожалуйста как создать обработчик события касания по разному тексту? Допустим есть StringBuilder str str заполнен с помощью...

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

Как определить размер отображаемой области Google карты на экране телефона - Программирование Android
Выводу Google карту на весь экран. В принципе могу поймать какой сейчас zoom у неё: mMap.setOnCameraChangeListener(new...

Элемент не позиционируется на экране - Программирование Android
Никак не могу блок с рекламой прижать к низу экрана. Пробовал разные варианты. <LinearLayout...

Закрепить элементы на экране - Программирование Android
Как сделать, чтобы элементы на форме адекватно масштабировались и не разъезжались по всему экрану на различных устройствах? К примеру,...


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

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

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