2017-06-21 64 views
1

我是android新手。我正在嘗試在我的應用程序中使用矢量繪圖。下面的代碼工作正常,直到棉花糖版本。在較低版本上也可以正常工作。但只要我在牛軋糖上運行它,圖像就會變得模糊。ANDROID NOUGAT上顯示Blurr圖像的矢量Drawables

我的build.gradle(項目)版本爲2.0+,在我的build.gradle下面的代碼添加(APP)

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 25 
     vectorDrawables.useSupportLibrary = true 
    } 

支持的版本是:

compile 'com.android.support:appcompat-v7:25.3.1' 

而且我已經加入下面的代碼在onCreate方法

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 

在我的XML:

<ImageView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    app:srcCompat = "@drawable/ic_camera_black_24dp"/> 
+0

您是否嘗試添加'android:scaleType =「fitXY」'您的ImageView XML? – MatPag

+0

@MatPag感謝您的快速回復。我也嘗試過,但都是徒勞的。圖像仍然模糊。 – Matrix

+0

您可以組裝一個小樣本項目並提供github鏈接嗎?我好奇這一點,因爲矢量繪圖有很多問題,應該用最新的支持庫解決 – MatPag

回答

1

我已經玩了一下你的代碼,我發現這個問題似乎是由於使用了真正不同大小的相同圖標造成的。在您的具體情況下,您的ImageView的矢量圖標爲200x200dp,同一圖標附加到TextView,方法爲setCompoundDrawablesRelativeWithIntrinsicBounds,該方法使用定義的矢量widthheight來確定其大小。 (24dp在你的情況下)

這種行爲背後的主要原因是這位谷歌工程師的迴應,你可以找到here。因此,如果您不想在將來遇到問題,則不應使用尺寸爲200x200dp和24x24dp的相同矢量圖標,因爲系統將創建一些緩存的位圖(以優化性能),而這不會達到您需要的尺寸,這可能會導致某些設備上的圖像模糊。

如果在真正不同的尺寸中需要相同的確切圖標,請使用多個Vector drawable。

PS:關於你的評論關於如何將JPEG或PNG轉換爲矢量繪圖的問題,我可以說矢量不應該由照片構建(即使可能它是非常困難和昂貴的),矢量只是方便的如果你使用小路徑,這就是爲什麼他們只用於圖標或標誌

+0

你的意思是寫「多個PNG」嗎?我會說,多個VectorDrawables作爲你鏈接到建議的答案。 –

+1

對不起,我的意思是多個矢量資源,我會盡快糾正它 – MatPag

+0

@MatPag非常感謝。我真的很困惑爲什麼圖像模糊。這真是一個很好的解釋。 :)。關於轉換問題 **如果我將小圖標設置爲PNG,並且我想將這些小圖標轉換爲矢量繪圖,該怎麼辦?如何實現?** – Matrix