Проверить, нажата ли внутри rectF в onTouchEvent

Я работал над очень простым небольшим приложением, используя расширенный вид. Проблема в том, что я не могу найти то, что было нажато в моем onTouchEvent. Я понял, что мне нужно сравнить точки давления (x и y) с элементами и посмотреть, какой из них он может быть.

Но … Я объявил прямоугольник, используя:

Paint color= new Paint(); color.setColor(Color.BLACK); rectF = new RectF(0.0f, 0.0f, 1.0f, 0.5f) ; canvas.drawRect(rectF, color); 

Пока все хорошо, но в функции onTouchEvent

 public boolean onTouchEvent(MotionEvent event) { int action = event.getAction() ; float x = event.getX() ; float y = event.getY() ; switch(action) { case MotionEvent.ACTION_DOWN: if(rectF().contains(x, y)) { // Something should happen } } invalidate(); return true ; } 

Я устанавливаю rectF с некоторыми относительными точками в диапазоне от 0 до 1, но X и Y i получают из диапазона событий от 0 и выше в зависимости от размера экрана.

Могу ли я легко преобразовать любое из значений?

редактировать

Мысль о том, что кто-то заинтересовался окончательным решением …

 public boolean onTouchEvent(MotionEvent event) { int action = event.getAction() ; float x = event.getX() ; float y = event.getY() ; int width = this.getWidth() ; int height = this.getHeight() ; switch(action) { case MotionEvent.ACTION_DOWN: if(rectF().contains(x/width, y/height)) { // Something should happen } } return true ; } 

Значения точки касания и RectF должны быть в одной и той же контрольной шкале в oreder для правильного сравнения. Это означает, что если вы объявите свой RectF для использования относительных размеров (0-1), вам нужно будет:

1: нормализовать положение MotionEvent по размеру экрана

ИЛИ 2: «денормализовать» размеры RectF по фактическому размеру экрана.

Я думаю, что 1 обычно предпочтительнее, поскольку он позволяет вам определять ваши исправления в терминах относительной компоновки, независимо от фактического размера экрана и конвертировать позиции событий на лету.

Например: rectF.contains(x/screenWidth, y/screenHeight);

Вы можете получить размер экрана, позвонив
Display display = getWindowManager().getDefaultDisplay() в вашей деятельности, а затем вызывает display.getWidth() или display.getHeight()

Intereting Posts
Есть ли более простой / лучший способ поместить границу / контур вокруг моего TextView? Приложение Android несовместимо с устройством ICS 4.0.4 Google Play Android BroadcastReceiver без фильтра намерения Журналы файловой системы Android Android, как печатать массив в текстовом виде или что угодно Firebase DB: Проверьте, нет ли у узла дочерних элементов? Какая новая версия диалогового окна запросов приложений в Android Facebook SDK 4.0.1 Как я могу программно закрыть приложение? Как отслеживать выбранные элементы в RecyclerView в Android? RelativeLayout не может быть добавлен в файл android.support.v7.widget.Toolbar Проверка локального массива Android-массива Получите изображение Blob и преобразуйте это изображение в растровое изображение Как получить доступ к папке загрузки в android? Ящик навигации: как установить выбранный элемент при запуске? Как вы имеете дело с кодом ошибки LicenseCheckerCallback.ERROR_NOT_MARKET_MANAGED?