2017-06-21 6 views
1

Ich bin neu bei Android. Ich versuche Vektorzeichen in meiner Anwendung zu verwenden. Der folgende Code funktioniert bis zur Marshmallow-Version. Funktioniert auch gut bei niedrigeren Versionen. Aber sobald ich es auf Nougat laufen lasse, wird das Bild verschwommen.Vector Drawables zeigt Blurr Bild auf ANDROID NOUGAT

Meine build.gradle (Projekt) Version 2.0 oder höher und hat unter Code in meinem build.gradle (app)

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

Support-Version hinzugefügt:

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

Auch habe ich hinzugefügt der folgende Code in onCreate Methode

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

    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 

in meinem XML:

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

Haben Sie versucht, 'android: scaleType =" fitXY "' zu Ihrem ImageView XML hinzuzufügen? – MatPag

+0

@MatPag Danke für die schnelle Antwort. Ich habe das auch versucht, aber alles vergebens. Immer noch ist das Bild verschwommen. – Matrix

+0

Können Sie ein kleines Beispielprojekt zusammenstellen und den GitHub-Link bereitstellen? Ich bin neugierig, weil Vector Drawables in der Vergangenheit viele Probleme hatte, die mit der neuesten Support-Bibliothek gelöst werden sollten – MatPag

Antwort

1

Ich habe ein wenig mit Ihrem Code gespielt und was ich entdeckt habe ist, dass das Problem durch die Verwendung von wirklich verschiedenen Größen des gleichen Symbols verursacht wird. In Ihrem speziellen Fall hatten Sie die ImageView mit dem Vektor-Symbol bei 200x200dp und das gleiche Symbol an die TextView mit der Methode setCompoundDrawablesRelativeWithIntrinsicBounds, die den Vektor definiert width und height verwendet, um seine Größe zu bestimmen. (24dp in Ihrem Fall)

Der Hauptgrund für dieses Verhalten ist die Antwort dieses Google-Ingenieurs, die Sie here finden können.

Wenn Sie also in Zukunft keine Probleme haben möchten, sollten Sie nicht das gleiche Vektorsymbol mit den Größen 200x200dp und 24x24dp verwenden, da das System einige zwischengespeicherte Bitmaps erstellt (um die Leistung zu optimieren) von der Größe sein, die Sie benötigen, und dies kann auf einigen Geräten zu unscharfen Bildern führen.

Wenn Sie das gleiche genaue Symbol in wirklich verschiedenen Größen benötigen, verwenden Sie mehrere Vektorzeichen.

PS: Über Ihren Kommentar Frage, wie man JPEG oder PNG in einen Vektor umwandelbar, kann ich sagen, dass Vektoren nicht von Fotos gebaut werden sollten (auch wenn es möglich ist extrem schwer und teuer), Vektoren sind nur bequem Wenn Sie kleine Pfade verwenden, werden sie deshalb nur für Symbole oder Logos verwendet

+0

Wollten Sie "mehrere PNGs" schreiben? Ich hätte mehrere VectorDrawables als die Antwort gesagt, die Sie mit vorgeschlagenem verbunden haben. –

+1

Ja sorry, ich meine mehrere Vector Ressourcen, ich werde es so schnell wie möglich korrigieren – MatPag

+0

@MatPag Vielen Dank. Ich wurde wirklich verwirrt darüber, warum das Bild verschwommen ist. Das war wirklich eine gute Erklärung. :). Auch über die Konvertierung Frage ** Was ist, wenn ich kleine Symbole als PNG habe und ich diese kleinen Symbole in Vektor-Drawables konvertieren möchte. Wie erreichen Sie das? ** – Matrix