Как перевести холст и по-прежнему получать события касания в правильных местах

Я пытаюсь создать собственный AbsListView (переопределяющий те же элементы в ListView, GridView и HeaderGridView), который будет перемещать все свои события рисования и касания на основе внешнего фактора (другие вещи, которые перемещаются по макету).

Отступы здесь не вариант, потому что тогда единственный способ попытаться управлять позицией AbsListView — это использовать супердерьмовый метод smoothScrollBy(int distance, int duration), и это дает мне целый уровень различных проблем, которые я пытаюсь преодолеть, просто рисуя все вместе. другую область экрана.

На данный момент я узнал, что рисовать на другой области экрана так же просто, как:

   @Override
   protected void onDraw(Canvas canvas) {
      canvas.translate(0, 400);
      super.onDraw(canvas);
   }

но события касания не переводятся, и все касания на 400 пикселей выше. Итак, я попытался перевести прикосновение также с помощью:

   @Override
   public boolean dispatchTouchEvent(MotionEvent ev) {
      ev.offsetLocation(0, -400);
      return super.dispatchTouchEvent(ev);
   }

он действительно работает относительно, до такой степени, что 1) при нажатии на элемент вызывается и 2) вид меняет цвет в зависимости от темы android:state_pressed="true", но сенсорные элементы Up или Cancel никогда не вызываются, и вид не обновляет рисунок обратно к цвет по умолчанию.

Я еще буду анализировать, но я не уверен, что сложный пользовательский адаптер с кнопками и детектором жестов будет работать или нет.

Итак, вопрос: как я могу перевести рисунок и при этом правильно получать события касания?


person Budius    schedule 20.05.2014    source источник
comment
Вы когда-нибудь находили решение своей проблемы? У меня аналогичные проблемы с сохранением сенсорных позиций.   -  person New Guy    schedule 30.06.2015
comment
@NewGuy, извините, нет. Видимо, это невозможно. Google только что выпустил библиотеку совместимости приложений для дизайна, которая, похоже, делает это по-другому.   -  person Budius    schedule 30.06.2015
comment
спасибо, что вернулись со мной. У вас есть ссылка на него? У меня здесь тоже есть вопрос: stackoverflow.com/questions/31145595/   -  person New Guy    schedule 30.06.2015
comment
@NewGuy в основном этот класс здесь developer.android.com/reference/ Android/поддержка/дизайн/виджет/   -  person Budius    schedule 01.07.2015