java - 如何在 android 的 Canvas 上绘制多段线?

标签 java android graphics android-canvas polyline

我一直在尝试在 Canvas 上绘制折线。我的代码没有错误,但是线段的连接顺序没有显示。请在下面找到代码 fragment ;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.View;

public class MyView extends View {
    private Paint redPaint;

    public MyView(Context context) {
        super(context, null);
        redPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
        redPaint.setStyle(Paint.Style.STROKE);
        redPaint.setColor(0xffff0000);
        redPaint.setStrokeWidth(5);

    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(10,30,200,200,redPaint);
        canvas.drawCircle(300,300,250,redPaint);

        Path mylines=new Path();
        mylines.moveTo(0,0);
        mylines.lineTo(1,1);
        mylines.lineTo(2,2);
        mylines.lineTo(3,3);
        mylines.lineTo(4,4);
        Paint GreenPaint=new Paint();
        GreenPaint.setARGB(255,0,255,0);
        canvas.drawPath(mylines,GreenPaint);

    }
}

最佳答案

您的代码基本上是正确的。您没有像 redPaint 那样完全初始化 GreenPaint,这是一个问题。第二个问题虽然可能不是问题,但您的折线形状太小,即使使用完全初始化的 GreenPaint,您也可能会错过它。

这是自定义 View 的更新版本,其中包含附加构造函数和初始化的 greenPaint。我还更改了折线的形状,并将其变大以便于查看 - 它只是代码中的一个 Blob 。此外,我将对象分配移出了 onDraw()

    public class MyView extends View {
    Path mylines = new Path();
    private Paint redPaint;
    private Paint greenPaint;

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyView(Context context) {
        super(context, null);
        init();
    }

    private void init() {
        redPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        redPaint.setStyle(Paint.Style.STROKE);
        redPaint.setColor(0xffff0000);
        redPaint.setStrokeWidth(5);

        greenPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        greenPaint.setStyle(Paint.Style.STROKE);
        greenPaint.setARGB(255, 0, 255, 0);
        greenPaint.setStrokeWidth(5);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(10, 30, 200, 200, redPaint);
        canvas.drawCircle(300, 300, 250, redPaint);

        mylines.moveTo(0, 0);
        mylines.lineTo(200, 50);
        mylines.lineTo(300, 150);
        mylines.lineTo(400, 250);
        mylines.lineTo(500, 300);

        canvas.drawPath(mylines, greenPaint);

    }
}

这是显示。 (我添加了灰色背景以提高 View 的可见性,但这不是必需的。)

enter image description here

关于java - 如何在 android 的 Canvas 上绘制多段线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59547940/

相关文章:

java - 我可以 Autowiring 命名记录器吗?

java - 使用itextpdf从3d pdf中提取缩略图

java - TestFX 与 Java 7 兼容吗?

android - ActionBarSherlock 在 eclipse 中不工作

graphics - R 图中的字体

java - 如何删除一个框以继续 java 中的 'for' 循环?

java - 有没有办法在不损失精度的情况下获得毫秒到天的转换,而不需要用 Java 编写数学公式?

javascript - 想在 android 中使用 node.js 和 socket.io 发送图像

android - android P 中的 GCM 推送通知问题 (28)

windows - 如何将具有每像素 alpha 的位图绘制到控件的 Canvas 上?