問(wèn)題
自定義了View后,在構(gòu)造函數(shù)中設(shè)置畫(huà)筆顏色,發(fā)現(xiàn)它沒(méi)起效,但是在onDraw()里設(shè)置顏色就會(huì)起效,出問(wèn)題的代碼如下:
public RoundSeekbarView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
//布局引用調(diào)用的是兩個(gè)參數(shù)的構(gòu)造函數(shù)
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);
paint.setDither(true);
paint.setColor(Color.RED);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.v("RoundSeekbarView", "onDraw");
//paint.setColor(Color.RED); //在onDraw()里設(shè)置顏色就會(huì)起效
paint.setStrokeWidth(100);
canvas.drawLine(100, 0,100,100,paint);
paint.reset();
Log.v("RoundSeekbarView", "onDraw end");
}
我在構(gòu)造函數(shù)中設(shè)置的畫(huà)筆顏色是紅色,但是實(shí)際畫(huà)出的線是黑色的(畫(huà)筆默認(rèn)顏色是黑色),分析了一下發(fā)現(xiàn)是paint.reset()的問(wèn)題,reset就是畫(huà)筆重置設(shè)置嘛,如何它就會(huì)變成默認(rèn)的黑色,這個(gè)我懂,可是為什么會(huì)把線的顏色改了?畫(huà)線的代碼明明在reset的前面。
分析
通過(guò)打日志分析發(fā)現(xiàn)onDraw()方法被執(zhí)行了兩次,也就是畫(huà)筆(紅)畫(huà)了一次---->畫(huà)筆reset(變回默認(rèn)顏色黑色了)---->又執(zhí)行了onDraw,黑筆畫(huà)了一次,覆蓋了原來(lái)的紅線。
因此最后看到的顏色會(huì)是黑色,所有有關(guān)畫(huà)筆的設(shè)置還是寫(xiě)在onDraw()里好一點(diǎn)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-805142.html
目前不知道為什么onDraw()為什么會(huì)執(zhí)行兩次,有沒(méi)有大佬可以賜教。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-805142.html
到了這里,關(guān)于【Android】自定義View onDraw()方法會(huì)調(diào)用兩次的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!