【问题标题】:How can I draw a polyline on a canvas in android?如何在 android 的画布上绘制折线?
【发布时间】:2020-04-20 05:01:42
【问题描述】:

我一直在尝试在画布上绘制折线。我的代码没有错误,但是连接的线段序列没有显示出来。请在下面找到代码sn-p;

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

    }
}

【问题讨论】:

    标签: java android graphics android-canvas polyline


    【解决方案1】:

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

    这是您的自定义视图的更新版本,其中包含一个额外的构造函数和一个初始化的greenPaint。我还更改了折线的形状并使其更大以易于看到 - 它只是您代码中的一个斑点。此外,我将对象分配移出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);
    
        }
    }
    

    这里是展示。 (我为视图的可见性添加了灰色背景,但这不是必需的。)

    【讨论】:

    • 感谢您抽出时间@Cheticamp。但是,模拟器应该显示三个对象;一个矩形、一个圆形和一条折线。但为什么它只显示矩形和圆形?如何让它显示所有三个对象?
    • 我非常感谢@Cheticamp,现在所有三个对象都在显示。你真棒!非常感谢您抽出宝贵时间。
    • @IkeIsrael 如果您认为答案有用,您可以接受答案并投票(但您可能没有足够的声誉来投票。)
    • 感谢提醒不知道如何接受答案,现在才想通。回答接受。一百万谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2020-05-25
    相关资源
    最近更新 更多