Intereting Posts
OnTouchEvent () не будет запущен, если вызывается setSystemUiVisibility (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) Как объединить изображение с помощью библиотеки Glide? Как реализовать распознавание жестов при износе android ADB не отвечает – подождите больше или убейте adb или перезагрузите (Ubuntu 13) 64-разрядный Ящик навигации с активностью и дочерними фрагментами ACTION_SEND посылает по электронной почте Почему я хочу избегать конструкторов не по умолчанию в фрагментах? MediaPlayer больше не работает с эмулятором с r10? Интеграция Flurry в одно и то же приложение на Android и iOS Android – добавление просмотров в изображения не обновляется – onClick Общие элементы, анимация между фрагментами Что случилось с темой ICS Holo Dialog? Как удалить старые строки TextView Как добавить push-уведомление в мое собственное приложение для Android Попытка вызвать виртуальный метод 'void android.support.v4.view.ViewPager.setAdapter (android.support.v4.view.PagerAdapter)' на ссылку нулевого объекта

Наложение Android, чтобы захватить ALL touch и передать их?

Я в основном пытаюсь получить все данные о событиях касания от чего-то вроде оверлей системы, переместить мои спрайты на основе этих данных касания, а затем позволить OS / homecreen / browser действовать на данные по своему усмотрению (или наоборот). Я нашел похожие вопросы, но ничего, что меня куда-то заводило, я еще не был:

Получение представления, которое получает все события касания

(Реализовано, с результатами ниже) Создание окна оверлея системы (всегда сверху)

Что я могу сделать:

Я могу ЭТО взять все события касания и действовать на них, перемещая мои спрайты и не позволяя OS / homecreen / browser видеть любой из них. ИЛИ ELSE. Я могу позволить событиям касания пройти и получить только «TOUCH_OUTSIDE» для Мое приложение, чтобы действовать.

Моя недостигнутая цель:

Я НЕ МОЖЕТ для жизни, когда я выясняю способ обойти работу с данными. Единственные методы, о которых я могу думать, что я не могу реализовать, – это: Перехват данных в моем APP и передача их на OS / homecreen / browser для работы с Разрешением OS / homecreen / browser сначала получить данные, а затем Получение обратного вызова с информацией каким-либо образом. Разрешение OS / homecreen / browser на получение данных, действие на данные и опрос их для того, что их значения прокрутки / местоположения, чтобы действовать на него в моем APP.

Я боюсь, что это невозможно, я думаю, что где-то читал где-нибудь в некоторых документах, которые я не могу найти сейчас: «Это все или ничего, либо ваше представление получает все события, либо ни один из них»

(Чтобы избежать путаницы, я не имею в виду, что у меня есть две точки зрения. Я имею в виду, что у меня есть один вид, контролируемый с помощью действия / службы, накладывающегося на OS / homecreen / browser. Как и панель стекла, если хотите).

Благодарим вас за любую полезную информацию, которую вы можете предложить, она очень ценится!

[UPDATE] Написал мою собственную документацию по этому вопросу ниже, чтобы не путать.

Solutions Collecting From Web of "Наложение Android, чтобы захватить ALL touch и передать их?"

Нашел эту документацию, в которой много говорится о том, что невозможно обойти оба: Android: Multi touch и TYPE_SYSTEM_OVERLAY

Они обсуждают обходные пути, но я не думаю, что любой из них действительно будет работать именно для того, что я пытаюсь сделать. Оба передают события в основное приложение и могут отследить их, чтобы действовать на них для себя.

Чтобы создать представление наложения, при настройке LayoutParams вам необходимо установить тип TYPE_SYSTEM_OVERLAY и использовать флаг FLAG_WATCH_OUTSIDE_TOUCH. Это представляет проблему, потому что в документации на Android указано: «вы не получите полный жест вниз / двигаться / вверх, а только местоположение первого вниз как ACTION_OUTSIDE». Чтобы получить полный набор сенсорных событий, вам необходимо использовать тип TYPE_SYSTEM_ALERT, но это заставляет наложение захватывать экран и останавливать взаимодействие с другими элементами.

Кто-то хочет не согласиться, я бы хотел услышать хорошие новости: -D

Вы можете использовать GestureOverlayView, если вы хотите скрыть линии, которые он рисует, вы можете установить цвет на Transparent # 00000000, чтобы он не отображался, а затем вы можете захватывать все касания и жесты.

http://developer.android.com/resources/articles/gestures.html

Это не оптимальное решение, но оно работает. Перезагрузите службу, чтобы флаг не был осязаемым. Поместите boolean extra в Intent, который используется для запуска службы, чтобы определить значение переключения предыдущего состояния. Лучшей реализацией будет стрельба по прикосновению при прослушивании окна и после определенного периода, когда он не прослушивается.

public class bleh extends Service { public void onCteqwer(int i) { Context context; Class <bleh> context1 = bleh.class; WindowManager.LayoutParams params = null; WindowManager mang = (WindowManager) getSystemService(WINDOW_SERVICE); //check previous state of service if(i==0) params = new WindowManager.LayoutParams(arg0,arg1,arg2,arg3,arg4,arg5); if(i==1) params = new WindowManager.LayoutParams (WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,arg0,arg1,arg2,arg3,arg4); LayoutInflater inflater = (LayoutInflater) getSystemService (LAYOUT_INFLATER_SERVICE); View mViw = inflater.inflate(arg, null); mViw.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); mang.addView(mViw, params); Intent z = new Intent(context, context1); if(i==0) z.putExtra("name", 1); if(i==1) z.putExtra("name", 0); stopSelf(); startService(z); } @Override public IBinder onBind(Intent arg0) { return null; } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Bundle i=intent.getExtras(); int userName = 0; if (i != null) { userName = i.getInt("name"); onCteqwer(userName); } }