画布画不圆圈

Meh*_*hDi 1 android canvas

在我的游戏的第一个,我使用画布从alpha 0到255绘制一些圆圈(这就像我自己制作一个fade_in动画)

但如果你看到图片(这张照片是在alpha 230中拍摄的),从alpha 0到254,这些圆圈都不平滑!(点击图片查看我的意思)

(并且只有当alpha变为255时,圆圈变得平滑) 在此输入图像描述 有什么问题,我该如何解决这个问题?

我的代码:我有一个游戏循环,得到画布

canvas = gameView.getHolder().lockCanvas();

那么在我看来,起初我设定:

    paintAlpha = 0;
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setFlags(Paint.ANTI_ALIAS_FLAG);
    paint.setStyle(Paint.Style.FILL);
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setAlpha(paintAlpha);
    paint.setColor(Color.parseColor(color));
Run Code Online (Sandbox Code Playgroud)

然后在每个循环(每个滴答)我这样做:

    if(paintAlpha < 255) {
        paintAlpha+=1;
        paint.setAlpha(paintAlpha);
    }
    canvas.drawCircle(cx, cy, currentRadius, paint);
Run Code Online (Sandbox Code Playgroud)

解决方案:感谢@nitesh.问题是因为s​​urfaceView无法为画布设置反别名(在View中你没有这个问题,我不知道为什么)通过使用Bitmap并在其上绘制并最终通过画布绘制位图,问题解决了(而不是直接在画布上绘图)

Nit*_*esh 9

将以下属性设置为绘制对象

paint.setAntiAlias(true);
Run Code Online (Sandbox Code Playgroud)

有关更好的理解和其他方法,请参阅此链接 https://medium.com/@ali.muzaffar/android-why-your-canvas-shapes-arent-smooth-aa2a3f450eb5#.p9iktozdi

来自文章

如果出现以下情况,请首先绘制位图:
- 您需要保留图像.
- 你需要绘制透明像素.
- 您的形状不会经常变化和/或需要耗时的操作.
使用消除锯齿绘制平滑边缘.
如果可能,请避免在位图上重绘,否则在重绘之前清除位图.

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (bitmap == null) {
        bitmap = Bitmap.createBitmap(200, 
                                     200, 
                                     Bitmap.Config.ARGB_8888);
        bitmapCanvas = new Canvas(bitmap);
    }
    bitmapCanvas.drawColor(
              Color.TRANSPARENT, 
              PorterDuff.Mode.CLEAR); //this line moved outside if
    drawOnCanvas(bitmapCanvas);
    canvas.drawBitmap(bitmap, mLeftX, mTopY, p);
}

protected void drawOnCanvas(Canvas canvas) {
    canvas.drawCircle(mLeftX + 100, mTopY + 100, 100, p);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述