gpt4 book ai didi

android - Canvas 画不光滑的圆圈

转载 作者:行者123 更新时间:2023-11-29 14:22:37 25 4
gpt4 key购买 nike

在我的第一个游戏中,我使用 Canvas 绘制了一些从 alpha 0 到 255 的圆圈(这就像自己制作一个淡入淡出动画)

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

(只有当 alpha 变为 255 时,圆才会变得平滑) enter image description here有什么问题,我该如何解决?

我的代码:我有一个游戏循环,获取 Canvas

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));

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

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

解决方法:感谢@nitesh。问题是因为 surfaceView 不能给 canvas 设置反别名(在 View 你没有这个问题,我不知道为什么)通过使用 Bitmap 并在其上绘制,最后通过 canvas 绘制位图,问题解决了(而不是直接在 canvas 上绘制)

最佳答案

设置以下属性来绘制对象

paint.setAntiAlias(true);

为了更好地理解和其他方法,请引用此链接 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);
}

enter image description here

关于android - Canvas 画不光滑的圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39764870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com