5

Das macht mich verrückt. Ich würde gerne in der Lage sein, ein Xml Vektor Zeichen Symbol programmgesteuert zu ändern, um es in einem ImageView zu verwenden.Android wie man ein XML-Vektor-Icon programmgesteuert skalieren (skalieren)

Das ist, was ich bisher gemacht habe, die

Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_marker,null); 
drawable.setBounds(0,0,512,512); 
imageVenue.setImageDrawable(drawable); 

Die Vektor-Symbol nicht funktioniert ic_marker nicht geändert wird. Es behält nur die fest codierten Werte für Breite und Höhe jedes Mal bei.

Irgendwelche Ideen?

Antwort

2

Sie können die Breite und Höhe Ihrer Bildansicht programmgesteuert ändern. Da Vektor-Zeichen die ursprüngliche Qualität des Bildes beibehalten, wird dies die gewünschte Ausgabe ermöglichen.

ImageView iv = (ImageView) findViewById(R.id.imgview); 
int width = 60; 
int height = 60; 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,height); 
iv.setLayoutParams(params); 
+2

Vielen Dank. Während diese Lösung gut funktioniert, habe ich auf eine Alternative gehofft, bei der ich meine Zeichen direkt skaliere und sie dann in die Bildansicht lege, ohne mit den Bildanzeigeparametern selbst zu stören. Ich werde eine Nachforschung darüber machen und wenn dies unmöglich ist, so wie ich es will, werde ich Ihre Antwort akzeptieren – ThanosFisherman

+0

Ich würde empfehlen, verschiedene Png-Dateien als typische Zeichensatz, mit verschiedenen Größen für verschiedene Geräte zu verwenden. Weg zu gehen :) –

+4

yeap ich weiß, aber mein ganzer Punkt hier ist es, Vektor Drawables zu verwenden, so dass ich keine Png-Dateien mit verschiedenen Größen haben muss – ThanosFisherman

0

Ich bin derzeit mit dem gleichen Problem konfrontiert.

Ich versuche so etwas, denn ViewParent hat tatsächlich die Höhe explizit eingestellt, also verwende ich match_parent und setze Ränder. Es funktioniert jedoch nicht die ganze Zeit, weil ich diese Ansicht einfach in einem Viewholder für RecyclerView verwende ... Außerdem habe ich bemerkt, dass ich manchmal eine vergrößerte Version mit Artefakten sehe, manchmal voller Größe, manchmal mit Rändern und größer Ränder ... Aber es könnte immer noch für Sie arbeiten, wenn Sie es in einem einfacheren Szenario verwenden.

mImageViewFront.setImageDrawable(vectorDrawable); 
final int paddingLR = mImageViewFront.getWidth()/4; 
final int paddingTB = mImageViewFront.getHeight()/4; 
LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
params.setMargins(paddingLR, paddingTB, paddingLR, paddingTB); 
mImageViewFront.setLayoutParams(params);