Я пытаюсь создать собственный 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
никогда не вызываются, и вид не обновляет рисунок обратно к цвет по умолчанию.
Я еще буду анализировать, но я не уверен, что сложный пользовательский адаптер с кнопками и детектором жестов будет работать или нет.
Итак, вопрос: как я могу перевести рисунок и при этом правильно получать события касания?