我想绘制使用手指画线,我想绘制多行颜色线都工作正常。但是在第一次绘制线条时发生了什么,然后它可以很好地工作,但是之后如果我绘制另一条线条,那么第一条线的颜色就会从中失去,并且会变成单一颜色线条。行颜色覆盖在android的第一行颜色
任何参考链接也很感激.. !!!!
在此先感谢。
我想绘制使用手指画线,我想绘制多行颜色线都工作正常。但是在第一次绘制线条时发生了什么,然后它可以很好地工作,但是之后如果我绘制另一条线条,那么第一条线的颜色就会从中失去,并且会变成单一颜色线条。行颜色覆盖在android的第一行颜色
任何参考链接也很感激.. !!!!
在此先感谢。
我只能假设颜色之间的差异取决于从pointsToDraw
的大小创建的hue
属性。
// 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
分配一个常数值,看看是否有差异。
你的代码正在做什么只是在绘制每个路径的新段时平滑地改变颜色。 这是在做行:
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);
}
}
}
}
}
相反deviding到'pointsToDraw.size()',尽量devide为恒定值,如:'色调=(浮点)的i/200; '玩不同的值,看看是否有结果。 –