我想使用具有径向渐变的可绘制形状作为视图的背景。根据 javadoc,渐变的半径可以设置为特定值(可能是像素)或百分比:
机器人:渐变半径
渐变的半径,仅用于径向渐变。
可能是浮点值,例如“1.2”。
可能是一个小数值,它是一个附加了 % 或 %p 的浮点数,例如“14.5%”。% 后缀始终表示基本大小的百分比;可选的 %p 后缀提供了相对于某些父容器的大小。
如果我错了,请纠正我,但在这里使用像素值是完全没用的,因为这个渐变看起来从一个屏幕密度到另一个屏幕密度完全不同(经过测试,是的,这是真的)。我尝试使用 % 和 %p 值,但它们根本不起作用。
我深入研究了 Android 源代码以查看如何处理 gradientRadius 并在 GradientDrawable 类中找到了这个:
TypedValue tv = a.peekValue(
com.android.internal.R.styleable.GradientDrawableGradient_gradientRadius);
if (tv != null) {
boolean radiusRel = tv.type == TypedValue.TYPE_FRACTION;
st.mGradientRadius = radiusRel ?
tv.getFraction(1.0f, 1.0f) : tv.getFloat();
} else ...
}
啊哈!因此,所有添加 % 或 %p 所做的就是将我的值除以 100。(我对此进行了测试,因为 TypeValue.getFraction() 的文档更加不清楚)。65% 变为 0.65。有道理,但没有任何用处。
那么使用 gradientRadius 的最佳方法是什么?
PS。我已经使用 GradientDrawable 以编程方式添加了我的背景,并且得到了想要的结果。我使用 GradientDrawable.setGradientRadius() 和一个相对于视图宽度的值,并在设备之间获得一致的渐变。