gpt4 book ai didi

Android Viewpager EdgeEffect自定义颜色

转载 作者:太空狗 更新时间:2023-10-29 15:42:20 24 4
gpt4 key购买 nike

我正在尝试在我的应用程序的 Viewpager 中自定义 EdgeEffect。目的是用定制的红色替换蓝色 ics Overscroll EdgeEffect。所以起初我编辑了overscroll_edge和相应的 overscroll_glow。然后我将它们都放入我的应用程序的/res/drawable 目录中。另外我复制了EdgeEffect Source File到我的应用程序的/src/android/widget/目录。我在 EdgeEffect 中所做的唯一更改是导入 com.my.application.R 而不是 com.android.internal.R。

但是 Android 不会使用我自定义的 android.widget.EdgeEffect 而不是 Android 系统中的那个,所以 Viewpager EdgeEffect 一直保持蓝色。我错过了什么吗?

最佳答案

您可以通过一些反射设置 ViewPagerEdgeEffect 颜色:

public static void setEdgeGlowColor(ViewPager viewPager, int color) {
try {
Class<?> clazz = ViewPager.class;
for (String name : new String[] {
"mLeftEdge", "mRightEdge"
}) {
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
Object edge = field.get(viewPager); // android.support.v4.widget.EdgeEffectCompat
Field fEdgeEffect = edge.getClass().getDeclaredField("mEdgeEffect");
fEdgeEffect.setAccessible(true);
setEdgeEffectColor((EdgeEffect) fEdgeEffect.get(edge), color);
}
} catch (Exception ignored) {
}
}

public static void setEdgeEffectColor(EdgeEffect edgeEffect, int color) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
edgeEffect.setColor(color);
return;
}
Field edgeField = EdgeEffect.class.getDeclaredField("mEdge");
Field glowField = EdgeEffect.class.getDeclaredField("mGlow");
edgeField.setAccessible(true);
glowField.setAccessible(true);
Drawable mEdge = (Drawable) edgeField.get(edgeEffect);
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 (Exception ignored) {
}
}

关于Android Viewpager EdgeEffect自定义颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com