我想繪製使用手指畫線,我想繪製多行顏色線都工作正常。但是在第一次繪製線條時發生了什麼,然後它可以很好地工作,但是之後如果我繪製另一條線條,那麼第一條線的顏色就會從中失去,並且會變成單一顏色線條。行顏色覆蓋在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; '玩不同的值,看看是否有結果。 –