Java 在使用windows管理器添加到覆盖的自定义视图中未调用onDraw

Java 在使用windows管理器添加到覆盖的自定义视图中未调用onDraw,java,android,Java,Android,我为为什么我的观点只是第一次被画出来而大发雷霆。我已经创建了一个自定义视图,可以为我绘制位图。看起来是这样的: protected void onDraw(Canvas canvas) { Paint p = new Paint(); canvas.drawBitmap(mBitmap, 0, 0, p); Log.e(TAG, "CALLED"); } mDView = new drawableView(this, nu

我为为什么我的观点只是第一次被画出来而大发雷霆。我已经创建了一个自定义视图,可以为我绘制位图。看起来是这样的:

protected void onDraw(Canvas canvas) {
            Paint p = new Paint();
            canvas.drawBitmap(mBitmap, 0, 0, p);
            Log.e(TAG, "CALLED");
}
mDView = new drawableView(this, null);
mDView.setLayoutParams(new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.MATCH_PARENT,
    LinearLayout.LayoutParams.MATCH_PARENT));
mDView.setOnClickListener(this);
mDView.setClickable(false);
mDView.setFocusable(false);
mDView.setWillNotDraw(false);
int id = 201;
mDView.setId(id);
wm.addView(mDView, topLeftParams);
然后在我的主要活动中,我将其设置为:

protected void onDraw(Canvas canvas) {
            Paint p = new Paint();
            canvas.drawBitmap(mBitmap, 0, 0, p);
            Log.e(TAG, "CALLED");
}
mDView = new drawableView(this, null);
mDView.setLayoutParams(new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.MATCH_PARENT,
    LinearLayout.LayoutParams.MATCH_PARENT));
mDView.setOnClickListener(this);
mDView.setClickable(false);
mDView.setFocusable(false);
mDView.setWillNotDraw(false);
int id = 201;
mDView.setId(id);
wm.addView(mDView, topLeftParams);
wm是我的windows管理器

wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
最后,我有一个回调函数,它在我的主要活动中被调用:

@Override
public void onFillEvent()
{
    Log.e(TAG, "onFillMain");
    mDView.setBitmap(mDepth.mFrameBuffer);
    mDepth.fillDepthBuffer();
    int id = 201;
    getParent().findViewById(id).invalidate();
    mDView.invalidate();
    mDView.postInvalidate();

}
我在windows管理器中尝试了所有三种方法使视图无效。但是它绘制的第一个位图会留在屏幕上。我从来没有见过onDraw日志在第一次之后被“调用”。我确实看到我的回电一直被呼叫并登录到illmain


后来我尝试将onLayout方法添加到自定义视图中,但也没有调用和记录。我被卡住了,我遗漏了什么?

为了触发覆盖的更改,您必须调用

wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
wm.updateViewLayout(mDView, topLeftParams);