2010-04-14 2 views
39

У меня есть Android scrollview с белым фоном. Затухающий край представляет собой белый полупрозрачный градиент. Я бы хотел изменить его как черный, а не белый. У меня есть ListView в том же проекте с белым фоном, который по умолчанию имеет черный затухающий край, но я не могу найти где (если где угодно), который был установлен.Как установить цвет затухающего края ScrollView Android?

ответ

37

Только что нашел это путем проб и ошибок.

Просто установите android:background="@color/yourColor" для <ScrollView>. Он задает тень для заданного цвета.

+0

Да, чертовски просто. Как вы можете себе представить, вам просто нужно установить непосредственный дочерний элемент scrollview на нужный фон. Благодаря! –

+2

В зависимости от времени загрузки списка это может показаться неудобным. (например, listview появляется с цветом фона перед тем, как ячейки списка будут нарисованы сверху) ... – bernstein

+0

Лучше установить тот же цвет, что и фон ваших ячеек и списка. Затем просто измените cachecolorhint на желаемый цвет затухания края. – bernstein

5

EDIT: это не отвечает на вопрос, который просил ScrollView. Этот ответ работает только с AbsListView и потомками (включая ListView).


Цвет затухающего края регулируется атрибутом android:cacheColorHint.

т.д .:

<ScrollView android:cacheColorHint="#ff000000" android:background="#ffffffff" />

будет установить фон белый, а cacheColorHint используется для рисования замирания края цвет - в этом случае, было бы черным.

+7

Я пробовал этот атрибут, но он не работает. Похоже, что этот атрибут/метод применяется только к [AbsListView] (http://developer.android.com/intl/fr/reference/android/widget/AbsListView.html#setCacheColorHint%28int%29). –

+0

Как насчет http://developer.android.com/intl/zh-CN/reference/android/view/View.html#setDrawingCacheBackgroundColor%28int%29? – Joe

+0

У меня был этот вопрос о horizontalscrollview, и вышеупомянутые изменения в xml сработали для него (по крайней мере, на эмуляторе). – Gimbl

3

Если вы не знаете, что изменило цвет вашего исчезающего края, это, вероятно, было применение стиля или темы. Проверьте свой манифест для android:theme="something" в действии. Если тема взята из группы android.R.style.Theme.Light, то край будет белым. По умолчанию android.R.style.Theme и android.R.style.Theme.Black будут иметь черные края затухания. Темы также влияют на другие атрибуты, поэтому полностью проверяйте атрибуты, прежде чем бросать их на одну вещь.

+0

Я проверил тему активности, это @android: style/Theme.NoTitleBar [источник которого] (http://www.google.com/codesearch/p?hl=ru#uX1GffpyOZk/core/res/res /values/themes.xml&q=Theme.NoTitleBar&sa=N&cd=12&ct=rc) содержит только андроид: windowNoTitle = true. –

+1

Комментарий над ним: '' Итак, вы используете темную тему, которая включает в себя черные края затухания. Вы хотите 'Theme.Light.NoTitleBar' – jqpubliq

+0

Я изменил эту тему, и это не повлияло на цвет затухающего края. –

73

Если вам нужен другой цвет затухающего края, чем фон, вы должны переопределить метод getSolidColor() ScrollView. Например:

@Override 
public int getSolidColor() { 
    return Color.rgb(0x30, 0x30, 0x30); 
} 
+1

Я не знаю, почему никто не голосовал за то, что явно является самым общим и лучшим ответом. Просто взгляните на JavaDoc of View и в нем четко сказано. – jfelectron

+1

Он прав, это единственный способ получить цветную область затухания при использовании фонового изображения. Просто расширьте класс ListView. –

+1

Полное решение класса для этого вопроса размещено здесь: http://stackoverflow.com/questions/4050903/is-it-possible-to-change-the-colour-of-the-fadingedge-of-a-listview/ 5877824 # 5877824 –

6

Вы можете использовать это:

https://github.com/AndroidAlliance/EdgeEffectOverride

enter image description here

Простой чистый и работает отлично!

+1

, поскольку я понимаю вопрос, на самом деле это не решение, но я все равно искал это. Так что спасибо за это – Jakob

7

Вы можете использовать:

final int glowDrawableId = context.getResources().getIdentifier("overscroll_glow", 
      "drawable", "android"); 
    final Drawable androidGlow = context.getResources().getDrawable(glowDrawableId); 
    androidGlow.setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN); 

    int edgeDrawableId = context.getResources().getIdentifier("overscroll_edge", "drawable", 
      "android"); 
    final Drawable androidEdge = context.getResources().getDrawable(edgeDrawableId); 
    androidEdge.setColorFilter(Color.RED, PorterDuff.Mode.SRC_IN); 
+1

Хорошая статья, описывающая это: http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/ – easycheese

1

ли это:

<ScrollView 
    android:theme="@style/scrollUpdate" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" > 

значений \ стилей положить тип

<style name="scrollUpdate"> 
    <item name="colorAccent">@color/yourcolor</item> 
    <item name="android:color">@color/yourcolor</item> 
    <item name="colorPrimary">@color/yourcolor</item> 
    <item name="colorPrimaryDark">@color/yourcolor</item> 
</style> 

работ мне ТКС!