我在这个问题上疯狂了几天。
我创建了一个自定义视图,在onDraw()方法中绘制了一些形状和文本。因为绘制的维度大于自定义视图,所以我必须重写onMeasure()方法来实现滚动。
Activity活动正常,滚动没问题,但是因为在onDraw()方法中执行了一些大的操作,Activity中的导航非常慢。必须在Draw()方法中执行这些操作。滚动导致重新绘制View,因此经常调用onDraw()方法。
自定义视图的内容会动态更改,它取决于用户通过先前活动所做的一些选择。
所以我想将我的Canvas转换为Bitmap但是有一些问题。
1)在创建Canvas之前,我无法知道Bitmap.createBitmap()的宽度和高度参数。我可以在onDraw()方法之后知道它们。所以我无法将Bitmap与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文件与包含自定义视图的Activity相关联。
<?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>