Mam niestandardową View
, która zawsze rysuje Bitmap
przy określonym obrocie. Zastępuję metodę onDraw
, obracam Canvas
i rysuję mapę bitową za pomocą wygładzonego Paint
.Bitmapa nie jest wytłoczona wygładzona
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();
}
Jednak zawsze otrzymuję postrzępione krawędzie w bitmapie. Zwróć uwagę, że prostokąt o prostokątach ma ładnie wygładzone krawędzie. Ponadto, po zastosowaniu p.setFilterBitmap(true);
działa to (powierzchnia bitmapy jest poprawnie filtrowana/wygładzona). Czy czegoś brakuje?
Oto minimalne Android projekt z izolowanym przykład jednym ekranie, który pokazuje View, która wciąga bez wygładzoną bitmapę, ładowany z zasobu: https://bitbucket.org/erickok/antialiastest
UPDATE: mam próbowałem również:
Paint p = new Paint();
p.setAntiAlias(true);
p.setFilterBitmap(true);
p.setDither(true);
canvas.drawBitmap(someBitmap, 0, 0, p);
ale to nie pomaga, jak setFilterBitmap
filtruje powierzchni; nie zapobiega wygładzaniu krawędzi. Ponadto, setAntiAlias
działa tak samo, jak bezpośrednio ustawia flagę w konstruktorze Paint
. W razie wątpliwości wypróbuj mój minimalny projekt testowy. Dziękuję bardzo za każdą pomoc!
Dzięki za odpowiedź. Jest to równe temu, co zrobiłem niestety, więc ma ten sam efekt (lub raczej nie ma wpływu na postrzępione krawędzie). –