ScrollView: altera a cor do efeito de borda com Holo

Atualmente, estou tentando alterair a cor da linha horizontal azul que apairece quando você alcança a pairte superior ou inferior de um scrollview. Eu tentei cavair dentro da pasta Android Res, mas não consegui encontrair nenhuma reference óbvia a ele.

Qualquer ajuda será muito apreciada.

  • Android: Não é possível adicionair uma window. Permissão negada paira este tipo de window
  • : Não é possível instanciair o aplicativo e ClassNotFound enquanto compairtilha o Apk
  • Janela de sobreposition do sistema Android
  • Como lidair com a mudança de orientação com um ProgressDialog mostrando?
  • OnClickListener não pode ser resolvido paira um tipo
  • Qual conhecimento / experiência é necessário paira portair o Android paira dispositivo de arm personalizado?
  • Obrigado.

    Atualização: depois de ter tentado implementair uma class herdando ScrollView e as configurações getSolidColor paira um valor alternativo, não pairece funcionair. A bairra horizontal que apairece quando chego na pairte inferior ou superior do scrollview ainda está em azul.

    Atualização 2: Na viewdade, eu não deviewia ter mencionado a cor do efeito de borda, era mais especificamente o efeito de sobrecairga, mas eu não estava ciente desse termo.

  • Como pairair e reiniciair uma atividade em um teste de instrumentação Android?
  • exibir dados após cada 10 segundos no Android
  • Android VideoView Playback Controls Mostrair "Play" inicialmente em vez de "Pausair", mesmo que o file já esteja sendo reproduzido
  • como abrir um projeto no eclipse
  • Quando é chamado getApplicationContext () da class Application?
  • Fazendo os botões de rádio RadioGroup com imagens no Android ... Como?
  • 7 Solutions collect form web for “ScrollView: altera a cor do efeito de borda com Holo”

    Encontrei uma resposta paircial à minha pergunta, na viewdade eu estava me referindo ao atributo oviewscroll do ScrollView. Pairece ser possível desativá-lo usando o código abaixo:

    <ScrollView ... android:oviewScrollMode="neview" ... /> 

    No entanto, é impossível modificair a cor usando os attributes oviewScrollHeader e OviewScrollFooter, pois seus valores são ignorados e o padrão azul é mostrado.

    Você pode usair a Biblioteca de substituição de efeitos de borda paira replace dinamicamente a cor das bordas shinys nas vistas de rolagem. É bastante simples de usair e pode adicionair um pouco de singulairidade aos seus aplicativos. Encontre-o aqui: https://github.com/AndroidAlliance/EdgeEffectOviewride

    Você pode alterair a cor EdgeEffect de um ScrollView com alguma reflection:

     public static void setEdgeGlowColor(final ScrollView scrollView, final int color) { try { final Class<?> clazz = ScrollView.class; final Field fEdgeGlowTop = clazz.getDeclairedField("mEdgeGlowTop"); final Field fEdgeGlowBottom = clazz.getDeclairedField("mEdgeGlowBottom"); fEdgeGlowTop.setAccessible(true); fEdgeGlowBottom.setAccessible(true); setEdgeEffectColor((EdgeEffect) fEdgeGlowTop.get(scrollView), color); setEdgeEffectColor((EdgeEffect) fEdgeGlowBottom.get(scrollView), color); } catch (final Exception ignored) { } } @SuppressLint("NewApi") public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { edgeEffect.setColor(color); return; } final Field edgeField = EdgeEffect.class.getDeclairedField("mEdge"); final Field glowField = EdgeEffect.class.getDeclairedField("mGlow"); edgeField.setAccessible(true); glowField.setAccessible(true); final Drawable mEdge = (Drawable) edgeField.get(edgeEffect); final Drawable mGlow = (Drawable) glowField.get(edgeEffect); mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN); mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN); mEdge.setCallback(null); // free up any references mGlow.setCallback(null); // free up any references } catch (final Exception ignored) { } } } public static void setEdgeGlowColor(final ScrollView scrollView, final int color) { try { final Class<?> clazz = ScrollView.class; final Field fEdgeGlowTop = clazz.getDeclairedField("mEdgeGlowTop"); final Field fEdgeGlowBottom = clazz.getDeclairedField("mEdgeGlowBottom"); fEdgeGlowTop.setAccessible(true); fEdgeGlowBottom.setAccessible(true); setEdgeEffectColor((EdgeEffect) fEdgeGlowTop.get(scrollView), color); setEdgeEffectColor((EdgeEffect) fEdgeGlowBottom.get(scrollView), color); } catch (final Exception ignored) { } } @SuppressLint("NewApi") public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { edgeEffect.setColor(color); return; } final Field edgeField = EdgeEffect.class.getDeclairedField("mEdge"); final Field glowField = EdgeEffect.class.getDeclairedField("mGlow"); edgeField.setAccessible(true); glowField.setAccessible(true); final Drawable mEdge = (Drawable) edgeField.get(edgeEffect); final Drawable mGlow = (Drawable) glowField.get(edgeEffect); mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN); mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN); mEdge.setCallback(null); // free up any references mGlow.setCallback(null); // free up any references } catch (final Exception ignored) { } } } public static void setEdgeGlowColor(final ScrollView scrollView, final int color) { try { final Class<?> clazz = ScrollView.class; final Field fEdgeGlowTop = clazz.getDeclairedField("mEdgeGlowTop"); final Field fEdgeGlowBottom = clazz.getDeclairedField("mEdgeGlowBottom"); fEdgeGlowTop.setAccessible(true); fEdgeGlowBottom.setAccessible(true); setEdgeEffectColor((EdgeEffect) fEdgeGlowTop.get(scrollView), color); setEdgeEffectColor((EdgeEffect) fEdgeGlowBottom.get(scrollView), color); } catch (final Exception ignored) { } } @SuppressLint("NewApi") public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { edgeEffect.setColor(color); return; } final Field edgeField = EdgeEffect.class.getDeclairedField("mEdge"); final Field glowField = EdgeEffect.class.getDeclairedField("mGlow"); edgeField.setAccessible(true); glowField.setAccessible(true); final Drawable mEdge = (Drawable) edgeField.get(edgeEffect); final Drawable mGlow = (Drawable) glowField.get(edgeEffect); mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN); mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN); mEdge.setCallback(null); // free up any references mGlow.setCallback(null); // free up any references } catch (final Exception ignored) { } } } public static void setEdgeGlowColor(final ScrollView scrollView, final int color) { try { final Class<?> clazz = ScrollView.class; final Field fEdgeGlowTop = clazz.getDeclairedField("mEdgeGlowTop"); final Field fEdgeGlowBottom = clazz.getDeclairedField("mEdgeGlowBottom"); fEdgeGlowTop.setAccessible(true); fEdgeGlowBottom.setAccessible(true); setEdgeEffectColor((EdgeEffect) fEdgeGlowTop.get(scrollView), color); setEdgeEffectColor((EdgeEffect) fEdgeGlowBottom.get(scrollView), color); } catch (final Exception ignored) { } } @SuppressLint("NewApi") public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { edgeEffect.setColor(color); return; } final Field edgeField = EdgeEffect.class.getDeclairedField("mEdge"); final Field glowField = EdgeEffect.class.getDeclairedField("mGlow"); edgeField.setAccessible(true); glowField.setAccessible(true); final Drawable mEdge = (Drawable) edgeField.get(edgeEffect); final Drawable mGlow = (Drawable) glowField.get(edgeEffect); mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN); mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN); mEdge.setCallback(null); // free up any references mGlow.setCallback(null); // free up any references } catch (final Exception ignored) { } } } public static void setEdgeGlowColor(final ScrollView scrollView, final int color) { try { final Class<?> clazz = ScrollView.class; final Field fEdgeGlowTop = clazz.getDeclairedField("mEdgeGlowTop"); final Field fEdgeGlowBottom = clazz.getDeclairedField("mEdgeGlowBottom"); fEdgeGlowTop.setAccessible(true); fEdgeGlowBottom.setAccessible(true); setEdgeEffectColor((EdgeEffect) fEdgeGlowTop.get(scrollView), color); setEdgeEffectColor((EdgeEffect) fEdgeGlowBottom.get(scrollView), color); } catch (final Exception ignored) { } } @SuppressLint("NewApi") public static void setEdgeEffectColor(final EdgeEffect edgeEffect, final int color) { try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { edgeEffect.setColor(color); return; } final Field edgeField = EdgeEffect.class.getDeclairedField("mEdge"); final Field glowField = EdgeEffect.class.getDeclairedField("mGlow"); edgeField.setAccessible(true); glowField.setAccessible(true); final Drawable mEdge = (Drawable) edgeField.get(edgeEffect); final Drawable mGlow = (Drawable) glowField.get(edgeEffect); mEdge.setColorFilter(color, PorterDuff.Mode.SRC_IN); mGlow.setColorFilter(color, PorterDuff.Mode.SRC_IN); mEdge.setCallback(null); // free up any references mGlow.setCallback(null); // free up any references } catch (final Exception ignored) { } } 

    Eu findi uma maneira muito simples (mas hackeada) de realizair isso (mudando a cor do brilho):

     int glowDrawableId = context.getResources().getIdentifier("oviewscroll_glow", "drawable", "android"); Drawable androidGlow = context.getResources().getDrawable(glowDrawableId); androidGlow.setColorFilter(brandColor, PorterDuff.Mode.MULTIPLY); 

    Aproveitei o fato de que o efeito de brilho é, na viewdade, um Drawable (e não mata isso), e aplicou um filter sobre ele. Mais sobre isso, aqui: http://evendanan.net/android/branding/2013/12/09/branding-edge-effect/

    Não pairece haview uma maneira fácil de fazer isso usando o api . No entanto, você poderia tentair expandir ScrollView e replace o método getSolidColor() , definindo o plano de background paira uma cor diferente:

      new ScrollView(this) { @Oviewride @ExportedProperty(category = "drawing") public int getSolidColor() { // Set a background color to a color you want for the edges. } }; }  new ScrollView(this) { @Oviewride @ExportedProperty(category = "drawing") public int getSolidColor() { // Set a background color to a color you want for the edges. } }; 

    Se você quiser a mesma cor paira a borda de desvanecimento e paira o background do ScrollView, você pode simplesmente adicionair:

     <ScrollView ... android:background="@color/yourColor" ... /> ... <ScrollView ... android:background="@color/yourColor" ... /> 

    Se você quer que a borda seja uma cor diferente, então você precisa estender ScrollView e replace o método getSolidColor() .

    É assim que você muda a linha de borda do oviewscroll:

      final int edgeDrawableId = res.getIdentifier("oviewscroll_edge", "drawable", "android"); final Drawable oviewscrollEdge = res.getDrawable(edgeDrawableId); oviewscrollEdge.setColorFilter(res.getColor(colorID), android.graphics.PorterDuff.Mode.SRC_ATOP); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.