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);