Android设计:在invalidate()之后没有调用onDraw()

时间:2018-02-09 15:05:52

标签: java android android-layout canvas

在我调用自定义视图的invalidate()方法(扩展View)后,不会调用onDraw()方法。这是由我的应用程序设计引起的,但我不知道如何解决这个问题。

我在FrameLayout中有两个Layout(见下文),它应该像照片编辑软件中的图层一样工作。在代码中,我为layout1和layout2添加了不同的自定义视图。将第二个自定义视图添加到第二个布局后,调用invalidate()后不会调用此第一个自定义视图的onDraw()方法。

<FrameLayout
    android:id="@+id/main_frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/main_layout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" />

    <LinearLayout
        android:id="@+id/main_layout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" />
</FrameLayout>

在两个自定义视图中,我在孔屏幕尺寸上绘制一个位图并绘制一些线条。该绘图在两个自定义视图中实现,如:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    if (w > 0 && h > 0) {
        this.bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    }
}

@Override
public void onDraw(Canvas canvas) {
    canvas.drawBitmap(this.bitmap, 0, 0, new Paint());
    drawSomeLines(canvas);
}

如果我只在一个布局中添加一个自定义视图,一切正常。有谁知道我的结构/代码有什么问题?

1 个答案:

答案 0 :(得分:1)

我自己想出来,也许解决方案可以帮助任何人。

问题是我将自定义视图添加到不同的布局。我删除了两个LinearLayouts并将我的自定义视图直接添加到FrameLayout,它工作正常。