java - Android 中的自定义曲线

标签 java android canvas shader bezier

我正在开发一款游戏,其中有一些贝塞尔曲线。目前,一切都很好,并且工作正常,尽管我对此曲线做了一些复杂的操作。为了绘制曲线,我使用 Canvas 和路径,如下所示:

private void refresh() {
    mPath = new Path();
    mPath.moveTo(start_x, start_y);
    mPath.cubicTo(anchor1_x, anchor1_y, anchor2_x, anchor2_y, end_x, end_y);
}
public void draw(Canvas canvas, Paint paint) {
    Path newPath = new Path(mPath);
    Matrix mMatrix = new Matrix();
    mMatrix.setTranslate(-mCamera.x1, -.mCamera.y1);
    mMatrix.postScale(mCamera.getWidthRatio(), mCamera.getHeightRatio());
    newPath.transform(mMatrix);
    canvas.drawPath(newPath, paint);
}

绘制参数通常如下:

 curvesPaint = new Paint();
 curvesPaint.setColor(0xFFFFFFFF);
 curvesPaint.setAntiAlias(true);
 curvesPaint.setStrokeCap(Paint.Cap.ROUND);
 curvesPaint.setStrokeJoin(Paint.Join.ROUND);
 curvesPaint.setStyle(Paint.Style.STROKE);
 curvesPaint.setStrokeWidth(canvas.getHeight() / 100f);
 if (shadow)
      curvesPaint.setShadowLayer(canvas.getHeight() / 50f, 0, 0, 0xAAFFFFFF);
 else
     curvesPaint.setShadowLayer(0, 0, 0, 0xAAFFFFFF);

我的问题是:怎样才能让曲线更漂亮?目前,它们只是白色(或带有白色阴影的白色)。我希望能够用漂亮的渐变或模型来绘制它们,但我不知道该怎么做。我正在考虑 Paint 类的 setShader 函数,但我不知道是否可以将它用于我的目的或如何使用它。其他解决方案,例如在一条之上绘制多条路径,由于 fps 较低,显然是不切实际的。

最佳答案

我建议您开始考虑使用 OpenGL 或第三方包装库,例如 libgdx。 Canvas 适用于相对简单的图形。我不认为它利用了设备 GPU 的优势。要充分利用 GPU 的强大功能,您需要使用 OpenGL。

关于java - Android 中的自定义曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691220/

相关文章:

java - 计算步数和 O 表示法

java - 扫描无效输入时出错

java - 为什么这种打印方法有效?不应该失败吗?

javascript - 如何使用 CSS position 属性对元素进行分层?

html - Canvas LineTo 中的多色

javascript - HTML5 Canvas 在绘制的多边形内寻找对象

java - 与数组中的字符串匹配的最长子字符串

android - 如何在kotlin android中将base64字符串转换为图像

android - 为 DynamoDB Android SDK 实现 CreatedAt 和 UpdatedAt 时间戳

android - 由于应用程序没有签名,因此无法将 Android 应用程序与 Digital Asset Link 链接