2014-09-25 141 views
1

我已经创建了一个自定义视图,通过onDraw()覆盖方法绘制一些形状。该视图是可滚动的,因此每次用户在Activity中导航时,onDraw()方法都会调用并绘制所有画布。在onDraw()方法中,有一些语句会进行一些硬性计算,所以我的意图是在用户滚动视图时仅绘制不可见的部分,而现在对于滚动而言,它们是可见的。Android - 只绘制可见部分

如何绘制只在我的自定义视图中可见的部分?

@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);   
    } 
} 

回答

2

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

但是,您可以检查画布以了解是否应绘制或不使用quickReject

实施例:

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

感谢您的答复。它是如何工作的? – user3653803 2014-09-25 15:15:47

+0

您为要绘制的元素创建一个边界矩形。你给它的元素的X,Y,X +宽度,Y +高度。然后它会完成剩下的工作。 – Knossos 2014-09-25 15:20:05

+0

这是否回答了您的问题? – Knossos 2014-09-26 08:10:11