在我调用自定义视图的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);
}
如果我只在一个布局中添加一个自定义视图,一切正常。有谁知道我的结构/代码有什么问题?
答案 0 :(得分:1)
我自己想出来,也许解决方案可以帮助任何人。
问题是我将自定义视图添加到不同的布局。我删除了两个LinearLayouts并将我的自定义视图直接添加到FrameLayout,它工作正常。