Ich habe eine benutzerdefinierte View
, die immer eine Bitmap
bei einer bestimmten Rotation zeichnet. Ich überschreibe die onDraw
Methode, rotiere die Canvas
und zeichne die Bitmap mit einem Anti-Aliased Paint
.Bitmap nicht gezeichnet Anti-Aliasing
public RotatedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
someBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.placeholder);
}
@Override
protected void onDraw(Canvas canvas) {
// Save and rotate canvas
canvas.save();
canvas.rotate(3F, getWidth()/2, getHeight());
// Draw the icon
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawBitmap(someBitmap, 0, 0, p);
canvas.drawRoundRect(new RectF(75, 50, 225, 200), 10, 10, p);
// All done; restore canvas
canvas.restore();
}
Allerdings habe ich immer gezackten Kanten auf der Bitmap. Beachten Sie, dass das roudned-Rechteck Kanten mit Anti-Aliasing erhält. Auch wenn ich p.setFilterBitmap(true);
anwende, funktioniert das korrekt (die Bitmap-Oberfläche wird gefiltert/geglättet). Fehle ich etwas?
Hier ist ein minimal Android-Projekt mit isoliertem Beispiel eines Bildschirms, der die Ansicht zeigt, dass das Nicht-Anti-Aliasing-Bitmap zeichnet, aus einer Ressource geladen: https://bitbucket.org/erickok/antialiastest
UPDATE: Ich habe auch versucht, die folgenden:
Paint p = new Paint();
p.setAntiAlias(true);
p.setFilterBitmap(true);
p.setDither(true);
canvas.drawBitmap(someBitmap, 0, 0, p);
Aber diese Hilfe nicht als setFilterBitmap
die Oberfläche filtert; Die Kanten werden nicht anti-aliasiert. Auch setAntiAlias
macht dasselbe wie das Setzen des Flags im Paint
Konstruktor direkt. Im Zweifelsfall versuche bitte mein minimales Testprojekt. Vielen Dank für jede Hilfe!
Danke für die Antwort. Das ist gleich dem, was ich leider gemacht habe, also hat es den gleichen Effekt (oder eher keinen Effekt auf die gezackten Kanten). –