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

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

Войти
Регистрация
Восстановить пароль
 
b0nny
4 / 2 / 0
Регистрация: 11.11.2013
Сообщений: 347
#1

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

12.08.2016, 12:17. Просмотров 354. Ответов 6
Метки нет (Все метки)

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

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

Я как бы знаю, где взять пример. У GravityBox есть pie control, который тоже отображается поверх всех экранов с жестом от края экрана. Но там слишком много классов для него и я не смогу разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2476 / 1960 / 611
Регистрация: 12.05.2014
Сообщений: 6,863
Завершенные тесты: 1
12.08.2016, 15:16 #2
Цитата Сообщение от b0nny Посмотреть сообщение
Любые подсказки, любые ссылки.
посмотри в гугл картинки (c) не мой
0
b0nny
4 / 2 / 0
Регистрация: 11.11.2013
Сообщений: 347
12.08.2016, 16:41  [ТС] #3
Ну так не интересно. Лучшие варианты я прошу подсказать.
0
b0nny
4 / 2 / 0
Регистрация: 11.11.2013
Сообщений: 347
14.08.2016, 11:40  [ТС] #4
Я нашёл примерное
0
b0nny
4 / 2 / 0
Регистрация: 11.11.2013
Сообщений: 347
28.08.2016, 00:45  [ТС] #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", "В области нав бара!!");
                        }
                }
        }
}
Это всё выполняется в потоке.

И есть проблема
Не выводятся касания или короткие жесты.
Т.е. выводится только какой-то массив допустимый.
Если тыкать много раз, то они выйдут. Или два маленьких жеста.
Возможно есть ещё задержка.
Помогите исправить.
0
b0nny
4 / 2 / 0
Регистрация: 11.11.2013
Сообщений: 347
09.09.2016, 18:23  [ТС] #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.
Есть идеи как решить?
0
b0nny
4 / 2 / 0
Регистрация: 11.11.2013
Сообщений: 347
13.09.2016, 21:50  [ТС] #7
На самом деле код на форум копировать не надо было, уважаемый модератор.
Там комментарий главный.


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

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