从画布到位图以改善渲染
我在这个关于日子的问题上疯了。
我已经创建了一个自定义视图,它在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