从画布到位图以改善渲染

我在这个关于日子的问题上疯了。

我已经创建了一个自定义视图,它在onDraw()方法中绘制了一些图形和文本。 由于绘制的维度大于自定义视图,因此我必须重写onMeasure()方法来实现滚动。

Activity运行正常,滚动是可以的,但是因为在onDraw()方法中执行了一些大的操作,所以Activity中的导航非常慢。 这些操作必须在Draw()方法中执行。 滚动导致重绘View,所以onDraw()方法被频繁地调用。

自定义View的内容会动态变化,这取决于用户通过前面的Activity进行的选择。

所以我想将我的Canvas转换成位图,但有一些问题。

1)在创建Canvas之前,我无法知道Bitmap.createBitmap()的宽度和高度参数。 我可以在onDraw()方法后知道它们。 所以我不能将一个位图关联到Canvas。

2)如果我尝试手动设置位图的尺寸,它会抛出一个OutOfMemory异常:由于形状的大小,我的Canvas非常大。

那么,我可以做些什么呢?

onDraw()方法:

protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);
    if(!listaTl.isEmpty())
    {
        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;
    }
    requestLayout();
}

方法“disegna *”包含一些canvas.draw *()语句。 这里的XML文件关联到包含自定义视图的活动。

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/vScroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:overScrollMode="always" 
android:fastScrollEnabled="true"
android:fastScrollAlwaysVisible="true"
>
<HorizontalScrollView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true"
    android:overScrollMode="always" 
    android:fastScrollEnabled="true"
    android:fastScrollAlwaysVisible="true"
>
<AppAndroid.RappresentazioneTimeline.TimelineView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scrollbars="vertical|horizontal"
/>


</HorizontalScrollView>
</ScrollView> 
链接地址: http://www.djcxy.com/p/67625.html

上一篇: From Canvas to Bitmap to improve rendering

下一篇: Convert Canvas to Bitmap