увядающие края, работающие только сверху и слева

StackOverflow https://stackoverflow.com/questions/4714895

Вопрос

Я сделал обычай 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top