2011-12-14 61 views
16

我創建一個徑向漸變,如:徑向漸變爲不同的DPI

<?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和傾角值gradientRadius場返回一個錯誤。 有沒有一種方法可以指定mdpi的半徑和縮放比例,並在餘下的屏幕密度中自動縮放或者創建多個可繪製文件?

回答

22

那麼,如果你這樣做:

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/values-hdpi/dimens.xml

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

</resources> 

您怎麼看?

+0

非常感謝,這應該被接受爲迴應 – Arnaud 2014-08-25 09:42:35

0

docs表示您可以將gradientRadius屬性指定爲float(猜測它意味着px)或分數。

可能是一個小數值,它是一個浮點數,後面跟着%或%p,例如「14.5%」。 %後綴始終表示基本大小的百分比;可選的%p後綴提供了相對於某個父容器的大小。

你試過嗎?這樣可以用dp或佈局中的任何單位指定大小,並從這裏引用它。但奇怪的是,大多數尺寸被指定爲可繪製xml格式的尺寸。

+4

那麼,我試着用自己的方式,並不能得到它的工作。這似乎是剛分出的百分比,因此上面提到的基本大小是1px。 %p表示法也一樣,所以這是一個失敗...我的壞:| – 2012-09-07 09:44:41

+0

分數不適用於Kitkat(API 19)和更低,也不是50%不是50%p,可繪製只是沒有顯示 – 2016-07-05 10:42:37

-2

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

例子:

對於50%radious設置爲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" /> 
8

老問題,但這個答案顯示了高排名在谷歌和我的信仰的替代方法更可擴展性。而不必提供尺寸爲每密度,從XML創建密度無關尺寸:

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

因爲我們不能直接應用此徑向漸變XML繪製的,我們必須從代碼到應用:

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

這覆蓋了android:gradientRadius字段,因此您可以將其保留爲0.但是,仍然不能使用(基於屏幕或其他方式)百分比維度。我將它應用於我的視圖的背景(已經設置了漸變drawable),但它當然也適用於ImageView的src元素。