2

Ich habe eine benutzerdefinierte Ansicht erstellt, die ImageView erweitert. Wenn ich den Vektor, der gezeichnet werden soll, dessen Ansichtsfenster kleiner ist, setze ich fest, dass das Bild verschwommen ist. Wenn ich nur das ImageView verwende, sehe ich, dass das Vektorbild scharf ist, wie es sein soll.Vectordrawable verschwommene Bitmap auf ImageView

In meiner benutzerdefinierten Ansicht überschreibe ich "setImageDrawable", wo ich super aufrufen und dann Bitmap aus der Zeichnungsdatei erhalten, um später in onDraw zu malen.

Hier ist, wie ich in Bitmap bin Umwandlung

public Bitmap getBitmapFromDrawable(Drawable drawable) { 
     Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), 
        drawable.getIntrinsicHeight(), 
        Bitmap.Config.ARGB_8888); 

     Canvas canvas = new Canvas(bitmap); 
     drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
     drawable.draw(canvas); 
     return bitmap; 
} 

Antwort

1

Sie benötigen Ansicht Breite und Höhe zu bekommen, nicht die ziehbar, und verwenden Sie diese als die ziehbar Grenzen. Ich nehme an, dass sich Ihre Ansichtsdimension im Laufe der Zeit ändern kann, sodass dies keine einmalige Aufgabe ist. Ich würde das Zeichen in einem Mitgliedsfeld speichern:

private Drawable drawable; 

    @Override 
    public void setImageDrawable(Drawable drawable) { 
     this.drawable = drawable; 
     this.drawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); 
     // invalidate if needed 
    } 

    @Override 
    protected void onMeasure(int wms, int hms) { 
     super.onMeasure(wms, hms); 
     if (drawable != null) drawable.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); 
    } 

Dann onDraw, zeichnen Sie einfach das Zeichen.

Verwandte Themen