увядающие края, работающие только сверху и слева
-
12-10-2019 - |
Вопрос
Я сделал обычай ImageView
что поддерживает базовую прокрутку через звонки View.scrollBy()
в GestureDetector
. Анкет Я хотел добавить некоторые отзывы о достижении границ прокрутки, поэтому я позволил исчезнуть:
setVerticalFadingEdgeEnabled(true);
setHorizontalFadingEdgeEnabled(true);
Но затухание работает, как я ожидал только сверху и левым краям, в то время как нижние и правые не исчезают. Я уверен, что эти края не вне экрана, потому что представление установлено на fill_parent по высоте и ширине. Так что случилось?
РЕДАКТИРОВАТЬ: Включение только вертикальных/горизонтальных краев замирания подтверждает, что нарисованы только верхние/левые края. Теперь я пытаюсь читать View.java (6870 an on)...
Решение
Кажется, что проблема в getBottomFadingEdgeStrength()
а также getRightFadingEdgeStrength()
, или, что лучше, в том, что я не переопределял их, чтобы работать с моим пользовательским представлением.
Эти защищенные методы сообщают View draw()
Когда нарисовать фардации (и как сильно - посмотрите, что за ScrollView
делает, когда вы приближаетесь к пределу прокрутки).
Для верхней и левой края это легко, потому что предел 0
В обоих случаях и реализация по умолчанию работает (в его включении/выключении), но для двух других мне нужно переопределить методы, чтобы учесть мои собственные границы прокрутки (в моем случае, измерения нарисованы).
Другие советы
Знайте, что это старое, но быстрая работа по сравнению с методами переоценки - это использование градиентов и относительной планировки в вашем XML. Ниже найдите абстрактную версию, вы не можете скопировать и вставить ее, но она должна передавать сообщение. Извините, я напечатал все это вручную.
<!-- object with fading edges in layout -->
<RelativeLayout>
<ImageView>
<LinearLayout background="gradient_left" layout_alignParentStart="true">
<LinearLayout background="gradient_right" layout_alignParentEnd="true">
</RelativeLayout>
<!-- gradient left xml in drawable-->
<shape>
<gradient startColor="#000" endColor:"@android:color/transparent" angle="0"
</shape>
<!-- gradient right xml in drawable -->
<shape>
<gradient startColor="#000" endColor:"@android:color/transparent" angle="180"
</shape>