Ho una personalizzazione View
che disegna sempre un Bitmap
a una determinata rotazione. Sovrascrivo il metodo onDraw
, ruoto lo Canvas
e disegno la bitmap con un anti-aliasing Paint
.Bitmap non disegnata 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();
}
Tuttavia, ottengo sempre bordi frastagliati sulla bitmap. Si noti che il rettangolo roudned ottiene bordi con anti-aliasing. Inoltre, quando applico lo p.setFilterBitmap(true);
questo funziona (la superficie bitmap viene filtrata/levigata) correttamente. Mi sto perdendo qualcosa?
Ecco un progetto Android minimo con isolato esempio di uno schermo che mostra la vista che disegna il bitmap non-anti-aliasing, caricati da una risorsa: https://bitbucket.org/erickok/antialiastest
UPDATE: Ho anche provato il seguente:
Paint p = new Paint();
p.setAntiAlias(true);
p.setFilterBitmap(true);
p.setDither(true);
canvas.drawBitmap(someBitmap, 0, 0, p);
Ma questo non aiuta come setFilterBitmap
filtri superficie; non ha anti-alias i bordi. Inoltre, setAntiAlias
equivale all'impostazione diretta del flag nel costruttore Paint
. In caso di dubbio, prova il mio progetto di prova minimo. Grazie mille per qualsiasi aiuto!
Grazie per la risposta. Questo è uguale a quello che ho fatto sfortunatamente, quindi ha lo stesso effetto (o meglio, nessun effetto sui bordi frastagliati). –