在畫圖的時候,圖片如果旋轉或縮放之后,總是會出現那些華麗的鋸齒。其實Android自帶了解決方式。
方法一:給Paint加上抗鋸齒標志。然后將Paint對象作為參數傳給canvas的繪制方法。
- paint.setAntiAlias(true);
方法二:給Canvas加上抗鋸齒標志。
有些地方不能用paint的,就直接給canvas加抗鋸齒,更方便。
- canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
測試代碼如下:
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Matrix;
- import android.graphics.Paint;
- import android.graphics.PaintFlagsDrawFilter;
- import android.view.View;
- public class MyView extends View {
- private PaintFlagsDrawFilter pfd;
- private Paint mPaint = new Paint();
- private Matrix matrix = new Matrix();;
- private Bitmap bmp;
- public MyView(Context context) {
- super(context);
- initialize();
- }
- private void initialize() {
- pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
- mPaint.setAntiAlias(true);
- matrix.setRotate(30);
- matrix.postScale(0.5f, 0.5f);
- bmp = BitmapFactory.decodeResource(getResources(), R.drawable.show);
- }
- @Override
- public void dispatchDraw(Canvas canvas) {
- canvas.translate(100, 0);
- canvas.drawBitmap(bmp, matrix, null);
- canvas.translate(0, 250);
- canvas.drawBitmap(bmp, matrix, mPaint);
- canvas.setDrawFilter(pfd);
- canvas.translate(0, 250);
- canvas.drawBitmap(bmp, matrix, null);
- }
- }
下圖是效果:
可以看出,兩種方式都挺有效的。