不同dpi的径向渐变

我正在创build一个径向渐变,如:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#7faacaFF" android:endColor="#cfe1edFF" android:gradientRadius="326" android:type="radial"/> </shape> 

但是在使用像sp和dip这样的值的gradientRadius字段中会返回一个错误。 有没有一种方法可以指定mdpi的半径和缩放比例,并在剩余的屏幕密度中自动缩放,或者创build多个可绘制文件是必要的?

Solutions Collecting From Web of "不同dpi的径向渐变"

那么如果你这样做:

RES /抽拉/ foo.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#7faacaFF" android:endColor="#cfe1edFF" android:gradientRadius="@dimen/radius" android:type="radial"/> </shape> 

RES /值-MDPI / dimens.xml

 <resources ...> ... <item name="radius" format="float" type="dimen">326</item> .... </resources> 

RES /值-HDPI / dimens.xml

 <resources ...> ... <item name="radius" format="float" type="dimen">200.34</item> .... </resources> 

你怎么看?

老问题,但这个答案显示高度在谷歌排名,我相信一种替代方法是更具规模。 不必为每个密度提供维度,而是从XML创build一个与密度无关的维度:

 <dimen name="gradient_radius">25dp</dimen> 

由于我们不能直接将其应用于径向渐变XML drawable,因此我们必须从代码中应用:

 ((GradientDrawable) someView.getBackground()) .setGradientRadius(getResources().getDimension( R.dimen.yellowbadge_largeradius)); 

这将覆盖android:gradientRadius字段,因此您可以将其保留为0.尽pipe如此,您仍然可以不使用(基于屏幕或其他方式)%维度。 我将它应用到我的视图的背景(已经设置了渐变可绘制),但它当然也适用于ImageView的src元素。

该文档说,你可以指定gradientRadius属性作为一个浮动(猜测这将意味着PX)或分数。

可能是一个小数值,它是一个浮点数,后面跟着%或%p,比如“14.5%”。 %后缀总是表示基本大小的百分比; 可选的%p后缀提供相对于某个父容器的大小。

你尝试过吗? 这将使得可以在dp或布局中的任何单位中指定大小,并从这里引用它。 奇怪的是,大多数尺寸被指定为可绘制xml格式的尺寸。

在android:gradientRadius字段中使用百分比。

例:

对于50%的辐射设置为50000%p

 <gradient android:angle="45" android:centerX="0.5" android:centerY="0.5" android:endColor="#123123" android:gradientRadius="50000%p" android:startColor="#456456" android:type="radial" />