【问题标题】:Android - Draw only parts which are visibileAndroid - 仅绘制可见的部分
【发布时间】:2014-09-25 23:12:11
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

    但是,您可以使用quickReject 检查画布以确定是否应该绘制。

    例子:

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

    【讨论】:

    • 您为要绘制的元素创建一个边界矩形。你给它你元素的 X、Y、X+Width、Y+Height。然后它会完成剩下的工作。
    • 这回答了你的问题吗?
    • 抱歉,没用。也许是因为我不知道如何在我的代码中使用你的语句
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2012-02-14
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多