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

NavRing - Android

Восстановить пароль Регистрация
 
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 339
12.08.2016, 12:17     NavRing #1
Ребята. Нужно подсказки как правильно сделать.
В MM убрали Navigation Ring. Кто не знает что это - посмотрите в гугл картинки.
В приложении в imageView я с помощью canvas примерно нарисовал.
1. Мне нужно понять, что нужно использовать, чтобы этот NavRing был анимирован. Ну, чтобы элементы его меняли свои свойства, когда например наводишь на ярлыки.
2. Потом нужно отображение поверх всех окон. 3. Ну и разобраться с жестом от панели навигации (навигационных кнопок).

Любые подсказки, любые ссылки.

Я как бы знаю, где взять пример. У GravityBox есть pie control, который тоже отображается поверх всех экранов с жестом от края экрана. Но там слишком много классов для него и я не смогу разобраться.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
12.08.2016, 15:16     NavRing #2
Цитата Сообщение от b0nny Посмотреть сообщение
Любые подсказки, любые ссылки.
посмотри в гугл картинки (c) не мой
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 339
12.08.2016, 16:41  [ТС]     NavRing #3
Ну так не интересно. Лучшие варианты я прошу подсказать.
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 339
14.08.2016, 11:40  [ТС]     NavRing #4
Я нашёл примерное
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 339
28.08.2016, 00:45  [ТС]     NavRing #5
Пробовал я читать касания в оверлае. Сделал прозрачной view с помощью windows manager.
Но в нем была проблема, что я не могу читать касания, если делать всё кликабельным взади него и всё-равно нельзя его наложить поверх навигационного бара. Хоть это и будет TYPE_SYSTEM_ERROR. На нём рисовать можно, но не читать касания.
Пошёл я по пути чтения касаний из системы с помощью рут прав.

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
Process root = Runtime.getRuntime().exec(new String[]{"su", "-c","getevent /dev/input/event0"});
LineNumberReader lineReader = new LineNumberReader(new InputStreamReader(root.getInputStream()));
 
String nextLine = null;
int touchY = 0;
while (null != (nextLine = lineReader.readLine())) {
        String[] str = nextLine.split(" "); // Делим строку на 3 части по пробелу - первая часть нам не нужна в обработке
        // 0035 - x, 0036 - y, 0000 - разделитель
        for (int i = 0; i < str[2].length(); i++) { // Удаляем все нулевые элементы в строке, чтобы переконвертировать число
               if (!String.valueOf(str[2].charAt(i)).equals("0")) {
                        str[2] = str[2].substring(i, str[2].length());
                        break;
               }
        }
        try {
               touchY = Integer.parseInt(str[2], 16); // Переводим из 16 в 10 сс
               Log.i("TouchEvent", str[1] + " : " + touchY);
        } catch (NumberFormatException e) {} // Для обработки одного исключения
 
        // Обработка
        if (!str[1].equals("0035")) { // Пропускаем все остальные (36, 00) кроме 35 - X
                if (str[1].equals("0036")) {
                        if (MainActivity.yDisplay + MainActivity.navBarHeight >= touchY && MainActivity.yDisplay < touchY) {
                            Log.i("TouchEventInNavBar", "В области нав бара!!");
                        }
                }
        }
}
Это всё выполняется в потоке.

И есть проблема
Не выводятся касания или короткие жесты.
Т.е. выводится только какой-то массив допустимый.
Если тыкать много раз, то они выйдут. Или два маленьких жеста.
Возможно есть ещё задержка.
Помогите исправить.
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 339
09.09.2016, 18:23  [ТС]     NavRing #6
Наткнулся я на вот это: https://stackoverflow.com/questions/...truntime-exec#
Java
1
2
3
4
5
6
7
8
9
10
11
12
Process p = Runtime.getRuntime().exec(new String[]{"su", "-c", "system/bin/sh"});
DataOutputStream stdin = new DataOutputStream(p.getOutputStream());
stdin.writeBytes("getevent\n");
InputStream stdout = p.getInputStream();
byte[] buffer = new byte[1];
int read;
String out = new String();
while(true){
  read = stdout.read(buffer);
  out += new String(buffer, 0, read);
  System.out.println("MYLOG: "+(new String(buffer, 0, read)));
}
 Комментарий модератора 
Копируйте код на форум

Из InputStream выводится только когда набирается 4096 bytes.
Есть идеи как решить?
b0nny
3 / 1 / 0
Регистрация: 11.11.2013
Сообщений: 339
13.09.2016, 21:50  [ТС]     NavRing #7
На самом деле код на форум копировать не надо было, уважаемый модератор.
Там комментарий главный.


Но я так и не знаю, как считывать, если меньше 4096 байт.
Если, кто-то знает, то подскажите пожалуйста.
Yandex
Объявления
13.09.2016, 21:50     NavRing
Ответ Создать тему
Опции темы

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