我创建了一个自定义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>
问题
- 我是否应该一直在内存中保留这 5 个单独的视图实例,位图大小为 1024x600?
- 我是否应该合并功能,以便我只需将一个视图添加到我的布局 XML 中,然后在每次需要更新视图时重新生成位图?
- 请记住,由于其复杂性,重绘我的位图可能需要一些时间,哪个选项对性能更好?
文档
我已经阅读了有关管理位图内存的 Android 文档,但是我觉得我已经实现了自定义视图中已经列出的要点,并且我认为它并没有完全涵盖我的场景。