Android - 仅绘制可见的部分

时间:2014-09-25 14:59:00

标签: android

我创建了一个自定义视图,通过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);         
    }   
}

1 个答案:

答案 0 :(得分:2)

由于语言的原因,很难准确知道你在做什么。

但是,您可以检查画布以了解是否应该使用quickReject进行绘制。

示例:

if(canvas.quickReject(boundingRect, EdgeType.BW)) {
    return;
}