VectorDrawable: Wie positionieren Sie es auf die Leinwand?
Für meine benutzerdefinierte Ansicht:
MyCustomView extends View
Machte ich einen VectorDrawable
mMyVectorDrawable = VectorDrawableCompat.create(getContext().getResources(), R.drawable.ic_some_image, null);
Habe ich seine Grenzen
mMyVectorDrawable.setBounds(0, 0, mMyVectorDrawable.getIntrinsicWidth(), mMyVectorDrawable.getIntrinsicHeight());
Und ich ziehen Sie es auf die Leinwand
mMyVectorDrawable.draw(canvas);
Sehe ich das Bild an der position 0,0
aber wie positioniere ich es? Wie positioniere ich das Rect, ich dachte, die ersten beiden Parameter von setBounds
wäre X-und Y-Koordinaten, wo Sie mit dem zeichnen beginnen, aber dies beeinflusst nur die Größe.
Wie kann ich meine position vector drawable auf einer Leinwand?
- entweder
translate()
IhreCanvas
vor dem zeichnen odersetBounds(x,y, intrinsic_width + x, intrinsic_height + y)
ich bin nicht sicher über die zweite Weise, obwohl...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie übersetzen Ihre Leinwand vor dem zeichnen der drawable auf Sie.
Die Werte
dx
unddy
bestimmen den Abstand der Koordinaten(0, 0)
wo die nächste drawable gezogen werden.Wenn Sie möchten, können Sie auch rückgängig machen, die übersetzung anschließend:
Die Frage ist ein bisschen alt, aber wenn es jemand helfen kann, ich habe eine Antwort auf diese eine.
Die Idee ist es, den Vektor drawable mit:
Dann erhalten wir die Bitmap aus diesem Drawable direkt mit der Größe, die wir wollen, zu halten die Qualität. Dann, weil wir eine bitmap, die wir ziehen können, wohin wir wollen.
Hinweis: In der defaultConfig Abschnitt des builds.gradle, vergessen Sie nicht, setzen Sie diese Zeile für retro-Kompatibilität:
Hier ist der code, um die Bitmap aus dem Drawable:
26.0.2
(und wohl früher?) es werden sich beschweren, dass Sie versuchen, eine nicht-öffentliche API hier, wenn Sie versuchen, zu verwendenAppCompatDrawableManager
. Ich denke, die richtige alternative ist, um mit zu gehenContextCompat.getDrawable(context, id)
25.3.1
von der Unterstützung der Bibliothek, wenn ich schrieb diese Antwort. Aber du hast Recht, ich habe versucht, mit einer neueren version ('26.0.2'
) und es scheint, dass Sie können nicht verwenden Sie diese Klasse nicht mehr. Es ist auch nicht der Verweis im Dokumentation. Funktioniert es mit deiner Lösung? (ContextCompat.getDrawable(context, id)
)Als @pskink sagte, dies funktioniert sehr gut: