安卓画布绘制直线 - 如何增加直线粗细

29

这似乎应该是相当简单的,但在我的安卓应用程序中,我使用画布(canvas)绘制一系列连接起来的线条。出于某种原因,我的线条非常模糊和细。我想知道如何使我的线条变得更加粗细?以下是我的代码...

for(int i=1; i<myArrayListOfValues.size(); i++){

        Paint myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        myPaint.setStrokeWidth(8/*1 /getResources().getDisplayMetrics().density*/);
        myPaint.setColor(0xffff0000);   //color.RED

        canvas.drawLine(myArrayListOfValues.get(i), myArrayListOfValues.get(i), myArrayListOfValues.get(i-1), myArrayListOfValues.get(i-1), myPaint);       

    }

还有一件事是,我画的线条和圆圈总是黑色的,setColor() 似乎从来没有任何作用。我尝试使用颜色名称(例如 color.red)甚至它们的十六进制值(例如 0xffff0000)


你能否分享这个类的更多代码,比如整个 onDraw?或者如果足够小,就分享整个类。它看起来还不错。你为什么在循环内创建 Paint 对象?因为所有迭代都使用相同的 'myPaint',所以最好在循环外先创建一次。 - Shaunak
我现在已经将它移出循环了。这是我的全部代码,都在onDraw方法中。我只想知道如何使线条变粗。它正在显示线条,但它们太细了。 - user859348
尝试移除 anti_alias 标志,并尝试使用 8.0。 - Shaunak
4个回答

49

更改值

myPaint.setStrokeWidth(8);

将其转换为更大的整数,例如:

myPaint.setStrokeWidth(50);

它会使线条变粗

另请参见Paint.setStrokeWidth(float)


实际上这个答案是有效的,而不是“标记正确”的答案。 - cherry-wave
这应该是答案! - Haikal Nashuha
OP已经在使用setStrokeWidth,问题是未设置Paint.Style.STROKE,因此它没有生效。 - Shaunak

22

尝试在声明'mypaint'之后立即包含此行

 mypaint.setStyle(Paint.Style.STROKE); 

如何使它变得更加轻巧? - AndroidCrazy
2
那就有点勉强了 :P - Shaunak
2
它对我没用。在JavaDoc中,它是这样写的:注意:由于一行始终被“框起来”,因此在绘制中忽略了样式。 - Burhan ARAS

1
如果您删除了ANTI_ALIAS_FLAG会发生什么?此外,您应该将Paint构造函数移动到for循环之外,这样它就不会在每次迭代时重新创建。

关于创建画笔实例的观点很有道理。在里面加上ANTI_ALIAS_FLAG是因为我在这里读到它可以帮助渲染线条https://dev59.com/1VXTa4cB1Zd3GeqP1msM。 - user859348
1
ANTI_ALIAS_FLAG只会在您尝试绘制曲线或斜线时使线条更加平滑。 - Shaunak

1
尝试这个(kotlin)
myPaint.apply{
            isAntiAlias = true
            color = Color.BLACK
            style = Paint.Style.STROKE
            strokeWidth = 5.dp
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接