不同dpi的径向梯度

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

    

但是在gradientRadius字段中使用sp和dip等值会返回错误。 有没有办法为mdpi指定半径和比例,并在其余的屏幕密度中自动缩放,或者是否需要创建多个可绘制文件?

那么如果你这样做会怎么样:

RES /抽拉/ foo.xml

     

RES /值-MDPI / dimens.xml

  ... 326 ....  

RES /值-HDPI / dimens.xml

  ... 200.34 ....  

你怎么看?

老问题,但这个答案在谷歌中排名很高,我认为另一种方法更具可扩展性。 不必为每个密度提供维度,而是从XML创建与密度无关的维度:

 25dp 

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

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

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

文档说您可以将gradientRadius属性指定为float(猜测它将表示px)或作为分数。

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

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

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

例:

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