Android-галерея контролирует порядок событий касания, которые не синхронизированы с getChildDrawingOrder
Я строю настраиваемый Android-контроль расширения галереи. Мне нужен эффект наложения взглядов, поэтому я выдаю
setSpacing(-60);
После того, как я это передам, у меня в Галерее три значка: сначала нарисовано 1, 3, а затем 2, которая является центральной. Правила того же самого определены в getChildDrawingOrder
а также включили его
setChildrenDrawingOrderEnabled(true);
Теперь проблема заключается в том, что представления прорисовываются так, как я определил правила при заказе. Но события в элементе управления галереей идут в исходном порядке просмотра, т.е. 1,2,3. Чтобы объяснить лучше,
1 рисуется, 3 рисуется и, наконец, 2 рисуется, и они перекрывают друг друга. Таким образом, вид имеет 50% от 1, 100% от 2 и 50% от третьего вида.
Но когда я касаюсь представлений, android предполагает, что 50% из 1, 50% из 2 и 100% из 3 видны на экране. Чтобы прояснить это немного, после 50% просмотра 1, если я нажму, 2 будет сфокусировано (как и должно быть, потому что, согласно моему правилу рисования, 2 сверху 1).
Но когда я щелкаю в любом месте после 50% просмотра 2, фокус переходит на 3, в то время как в соответствии с порядком рисунка 3 там не видно, 100% из 2 виден, но для 50% области обзора 1 фокус это вид 2.
Не могли бы вы помочь поделиться своими мыслями о том, как мы можем решить эту проблему, заставив порядок событий следовать шаблону представления на экране?
1 ответ
Вы должны вручную пересчитать области касания этих дочерних видов.
Скорее всего, вы захотите переопределить getHitRect() и вернуть свой собственный Rect
объект, границы которого были скорректированы в соответствии с перекрывающимися областями.