gpt4 book ai didi

android - Shape Drawable gradientRadius 仅适用于像素。这不是没用吗? % 值不起作用

转载 作者:IT老高 更新时间:2023-10-28 23:36:05 28 4
gpt4 key购买 nike

我想使用具有径向渐变的可绘制形状作为 View 的背景。根据 javadoc,渐变的半径可以设置为特定值(可能是像素)或百分比:

android:gradientRadius

Radius of the gradient, used only with radial gradient.

May be a floating point value, such as "1.2".

May be a fractional value, which is a floating point number appended with either % or %p, such as "14.5%". The % suffix always means a percentage of the base size; the optional %p suffix provides a size relative to some parent container.

如果我错了,请纠正我,但在这里使用像素值是完全没用的,因为这种渐变看起来从一个屏幕密度到另一个屏幕密度完全不同(经过测试,是的,这是真的)。我尝试使用 % 和 %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() 和一个相对于 View 宽度的值,并在设备之间获得一致的渐变。

最佳答案

要使用所有屏幕尺寸,您必须在 dp 中设置半径。可以通过这种方法从dp计算px

 public float pxfromDp(float dp) {
return dp * getResources().getDisplayMetrics().density;
}

所以例如你想设置 GradientDrawable.setGradientRadius(pxfromDp(7));

关于android - Shape Drawable gradientRadius 仅适用于像素。这不是没用吗? % 值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983141/

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