2010-05-07 71 views
20

我使用以下繪製:是否可以對可繪製的漸變進行抖動?

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    > 

    <gradient 
     android:startColor="@color/content_background_gradient_start" 
     android:endColor="@color/content_background_gradient_end" 
     android:angle="270" 
     /> 

</shape> 

的問題是,我覺得非常的捆紮在華電國際設備(如Nexus One的和Droid),因爲梯度從該屏幕的頂部到最底部進入。

根據http://idunnolol.com/android/drawables.html#shape_gradient,梯度沒有「抖動」屬性。我能做些什麼來平滑漸變?

注意:將dither =「true」添加到形狀似乎不起作用。

回答

11

我寫了你引用的文檔。我再次看了一下代碼,很遺憾,除了在代碼中明確調用GradientDrawable.setDither()之外,沒有辦法在GradientDrawable上啓用抖動。

(代碼的樣子,技術上你可以包括梯度作爲孩子<selector>的,並啓用抖動對整個選擇;但是,它絕對是一個黑客)

我我不相信啓用抖動實際上可以解決您的問題,因爲抖動(至少在官方Android文檔中提到)是爲了在設備調色板太小時解決條帶化問題。由於漸變的大小,這似乎是一個帶狀問題。

2

去年我遇到了一個非常類似的問題,在android-developers名單上沒有得出任何有用的結論。

然而,前一段時間我試圖<gradient>和所有各種dither屬性種類的Drawable秒和手動創建抖動的PNG —,如果我手動創建使用GIMP新形象,在這一點上指定的密度後發現—(即明確輸入120或240等)創建圖像時,它看起來很棒,即使在hdpi設備上。儘管這是一個灰度漸變,並沒有太多的顏色。

保存的PNG結束時比較大(至少240dpi),但看起來不錯。

7

大家好,我有同樣的問題,有一個解決方案,但它不是很好。

getWindow().setFormat(PixelFormat.RGBA_8888); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); 

這對我的作品,但問題是,整個窗戶的抖動。我正在尋找找到一種方法來抖動漸變,但我找不到任何東西。 xml中的android:dither =「true」不起作用,並且GradientDrawable.setDither(true)也不起作用。所以,任何想法,我怎麼只能漸變?

+0

選定的答案沒有幫助我,你的確做到了!擁有Android 2.2的Galaxy S。 – 2011-06-10 22:56:56

相關問題