我正在尝试使用手指画画画线,我想画多色的线条都工作正常。但是,当我第一次绘制一条线然后它工作正常但是之后如果我画另一条线然后第一条线的颜色将从那里失去并且它将变得像一条颜色线。
任何参考链接也很欣赏.. !!!!
提前致谢。
答案 0 :(得分:3)
我只能假设颜色之间的差异取决于hue
属性,该属性是根据pointsToDraw
的大小创建的。
// set paint to whatever color you want
float hue = (float)i /pointsToDraw.size();
您在屏幕上绘制的每一行都不是之前的完整副本,对吧?因此pointsToDraw
的大小会有所不同,因此hue
对不同的行会有不同的值。
由于hue
用于生成线条颜色,因此每个新线条都将具有独特的颜色。
mPaint.setColor(Color.HSVToColor(
new float[] {
hue*360, 1, 1
}));
要测试此假设,请尝试为hue
分配一个常量值,并查看是否有任何差异。
答案 1 :(得分:1)
您的代码所做的只是在绘制每条路径的新段时平滑地更改颜色。 这是按行完成的:
float hue = (float)i /pointsToDraw.size();
mPaint.setColor(Color.HSVToColor(
new float[] {
hue*360, 1, 1
}));
hue
平滑变化,因为我是你的迭代变量。
代码的问题在于,您使用的值取决于屏幕上的路径数(即hue
),而不是使用某个常量值作为除数来计算pointsToDraw.size()
。
所以我认为以下代码会这样做。 (我所做的只是改变除数来计算hue
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(clearCanvas)
{ // Choose the colour you want to clear with.
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
clearCanvas = false;
fl.invalidate();
}else {
synchronized(pointsToDraw)
{
for (ArrayList<Point> paths : pointsToDraw) {
for (int i=0; i<paths.size()-1; ++i) {
// set paint to whatever color you want
float hue = (float)i /(paths.get(0).x+paths.get(0).y);
mPaint.setColor(Color.HSVToColor(
new float[] {
hue*360, 1, 1
}));
canvas.drawLine(paths.get(i).x, paths.get(i).y, paths.get(i+1).x, paths.get(i+1).y, mPaint);
}
}
}
}
}