У меня есть пользовательский вид подкласса, на который я визуализирую свою графику, и другой подкласс View (фактически подкласс LinearLayout), который я иногда использую для наложения графической информации. Это второе представление содержит ImageView, который я использую в качестве кнопки для запуска события.
По мере его реализации неожиданная задержка между первым представлением, получающим onTouchEvent, и вызовом dispathTouchEvent() на дочернем представлении, и вызовом ImageView onClickListener onClick(). Здесь соответствующий код:
@Override
public boolean onTouchEvent(MotionEvent event)
{
if ( getPopupRect().contains(event.getX(), event.getY()) )
{
// translate to relative coordinates
PointF popupOrigin = getPopupPoint();
event.setLocation(event.getX() - popupOrigin.x, event.getY() - popupOrigin.y);
mPopup.dispatchTouchEvent(event);
}
...
}
Метод subview onClick() не вызывается до тех пор, пока я не коснусь и не открою "главное" представление.
Вопрос: как я могу удалить или свести к минимуму эту задержку, так что onClick() вызывается в разумные сроки без дальнейшего действия пользователя?
Проблема в том, что "клик" состоит из пресса и события релиза. Таким образом, вы никогда не получите клик-событие, если вы также не отпустите кнопку. Используйте OnTouchListener в childview, как и в родительском представлении, - тогда вы сможете получить одно и то же событие.