我创建了一个自定义View
对象,它覆盖onDraw
方法来绘制一个相当复杂的UI。我将其中5个自定义视图添加到LinearLayout 中,但任何时候只能看到一个视图。
根据用户在我的应用程序中的操作,我在每个属性上切换View.Visibility
属性,以便只有一个可见。
为了澄清,我正在使用的方法适用于我,它似乎相当敏感。我只是担心这种方法会如何影响低端或低端设备。
以下是我当前代码的示例:
自定义视图
public class MyDrawingView extends View {
private Bitmap mViewBitmap;
private int mWidth = 1024; // The width of the device screen
private int mHeight = 600; // Example value, this is dynamic
@Override
protected void onDraw(Canvas canvas) {
// Copy the in-memory bitmap to the canvas.
if(mViewBitmap != null) canvas.drawBitmap(mViewBitmap, 0, 0, mCanvasPaint);
}
private void drawMe() {
if(mViewBitmap == null) mViewBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(mViewBitmap);
c.drawBitmap(...);
c.drawText(...);
// Multiple different methods here drawing onto the canvas
c.save();
}
}
布局XML
<LinearLayout>
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.company.project.ui.MyDrawingView
android:id="@+id/myCustomView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
问题
文档
我已经阅读了Managing Bitmap Memory上的Android文档,不过我觉得我已经实现了自定义视图中已经列出的要点,我认为它不能完全覆盖我的场景。
答案 0 :(得分:0)
我不确定你为什么要在LinearLayout
内放置具有设备大小的视图,然后相应地隐藏它们。你最好使用ViewFlipper
或更好的ViewPager
。
最好的一个是ViewPager,从那时起,当不可见时,你可以从内存中解除分配位图。
此外,如果您要从互联网或SD卡加载图像,可以使用Universal Image Loader,这样可以简化缓存和内存管理。无需重新发明轮子:)
答案 1 :(得分:0)
好的,所以我接受了Geobits对堆大小的评论,并提出了解决问题的方法:
Bitmap
RGB_565
以使位图略小在上述之后,我设法将整个应用程序所需的RAM减少到25Mb,我非常满意。