Использование Floating touch API в своих Android приложениях

Floating touch API - программирование в AndroidВ марте этого года компания Sony выпустила смартфон Xperia Sola. Одной из основных фишек смартфонов стала технология Floating touch, которая позволяет определять положение пальца на расстоянии нескольких миллиметров от экрана. В промо ролике телефона показано, как живые обои телефона реагируют на приближение пальца. К сожалению, на момент выход аппарата практически не было программ, использующих эту технологию. Исключение составлял разве что встроенный браузер. Между тем, реализация  поддержки Floating touch в своем приложении - довольно простая задача. Прежде чем приступить к описанию работы с Floating touch API следует сказать, что Floating touch работает, начиная с четвертой версии Android (Ice Cream Sandwich).

Одним из рекомендуемых способов применения Floating touch является подсвечивание элементов управления, над которыми находится палец. Щелчок мимо ссылок или кнопок, особенно когда они находятся в куче, довольно частая и раздражающая ситуация. Подсвечивание активного элемента управления, над которым находится палец, позволит более точно целиться и избегать неверных щелчков.

Программирование андроид приложений с использованием Floating touch API не представляет большого труда. Для отслеживания положения пальца над экраном нужно использовать класс MotionEvent, в котором определено три действия (action): ACTION_HOVER_ENTER, ACTION_HOVER_MOVE, ACTION_HOVER_EXIT. Нам нужно просто переопределить метод View.onHoverEvent или Activity.dispatchGenericMotionEvent. Из соображений совместимости и корректности работы приложения настоятельно рекомендуется проверять действие и отрабатывать как касания, так и перемещения над экраном.

Помимо привычных координат, задающих положение пальца, при работе с Floating touch нам доступен еще один параметр, определяющий расстояние от экрана. Частая ошибка начинающих разработчиков - указание точной дистанции. На практике пользователь никогда не будет держать палец на расстоянии 2,0мм от экрана. Рука трясётся, и палец то удаляется, то приближается  к экрану, поэтому разумно проверять попадание его в диапазон расстояний. Это можно сделать с помощью метода  InputDevice.getMotionRange. Еще одна особенность Floating touch заключается в том, что она задает расстояние в неких относительных единицах, не привязанных жестко к расстоянию. Дело в том, что в основе Floating touch лежит измерение емкости, а на изменение емкости влияет не только расстояние до экрана, но и толщина пальца, угол, под которым он подносится, температура окружающей среды. Так что физически невозможно определить точное расстояние до пальца. В среднем Floating touch начинает работать где-то на расстоянии одного см от экрана.

Для того, чтобы проверить, поддерживается ли Floating touch телефоном, можно использовать метод PackageManager.hasSystemFeature, которому в качестве параметра передать com.sonymobile.floating_touch.

Следующий пример перехватывает события  Floating touch и выводит сообщения в TextView.

@Override
public boolean dispatchGenericMotionEvent(MotionEvent ev){
StringBuffer output=new StringBuffer();
output.append("action: "+ ev.getActionMasked()+"\n");
output.append("x: "+ ev.getX()+"\n");
output.append("y: "+ ev.getY()+"\n");
MotionRangerange= ev.getDevice().getMotionRange(MotionEvent.AXIS_DISTANCE);
 
if(range!=null){
output.append("distance: "+ ev.getAxisValue(MotionEvent.AXIS_DISTANCE)+"\n");
output.append("distance min: "+range.getMin()+"\n");
output.append("distance max: "+range.getMax()+"\n");
}
 
if(mHasFloatingtouch==null){
mHasFloatingtouch= getPackageManager().hasSystemFeature(
"com.sonymobile.floating_touch");
}
 
output.append("has floating touch: "+ mHasFloatingtouch);
 
if(mTextOutput==null){
mTextOutput=(TextView) findViewById(R.id.textView1);
}
 
mTextOutput.setText(output);
return mHasFloatingtouch;
}

Автор: Andreas Sandblad, Software Architect, Sony
Источник:developer.sonymobile.com
Перевод:Александр Ледков




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна