我创建了一个自定义视图,通过onDraw()重写方法绘制了一些形状。此视图是可滚动的,因此每次用户在Activity中导航时,onDraw()方法都会调用并绘制所有画布。在onDraw()方法中有一些语句进行了一些硬计算,所以我的目的是绘制当用户滚动视图时,只绘制不可见的部分,现在,对于滚动,它们是可见的。
如何只绘制自定义视图中可见的部分?
@Override
protected void onDraw(Canvas sysCanvas)
{
super.onDraw(sysCanvas);
if(!giaDisegnato) //If I've never drawn before, let's draw
{
if(!listaTl.isEmpty())
{
toDisk= Bitmap.createBitmap(w,h,Bitmap.Config.RGB );
canvas = new Canvas(toDisk);
canvas.drawColor(Color.WHITE);
p.setStyle(Paint.Style.FILL_AND_STROKE);
p.setAntiAlias(true);
p.setStrokeWidth(1);
for(TimelineGrafica t : listaTl)
{
if(inseritaLaPrima)
y = ySalvata + this.yAngoloDestroGiu + DISTANZA_FRA_TIMELINE;
p.setColor(t.getColor());
disegnaPunta(canvas,p,t);
disegnaRettangolo(canvas,p,t);
disegnaGrain(canvas,p,t);
disegnaFatti(canvas,p,t);
inseritaLaPrima = true;
}
y = ySalvata;
inseritaLaPrima = false;
sysCanvas.drawBitmap(toDisk,0,0,p);
}
requestLayout();
giaDisegnato = true;
}
else
{
//Here I've already drawn. So I'd like to redrawn the part of the view that now
//is visible.
sysCanvas.drawBitmap(toDisk,0,0,p);
}
}
答案 0 :(得分:2)
由于语言的原因,很难准确知道你在做什么。
但是,您可以检查画布以了解是否应该使用quickReject进行绘制。
示例:
if(canvas.quickReject(boundingRect, EdgeType.BW)) {
return;
}