Android 在dispatchDraw中将视图添加到视图组

Android 在dispatchDraw中将视图添加到视图组,android,android-canvas,android-view,viewgroup,Android,Android Canvas,Android View,Viewgroup,我正在尝试制作一个透明面具。 我创建了一个幻灯片屏幕,它扩展了视图组。 在构造函数中,我添加: LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); LinearLayout roadMap = new LinearLayout(context); roadMap.setLayoutPara

我正在尝试制作一个透明面具。 我创建了一个幻灯片屏幕,它扩展了
视图组
。 在构造函数中,我添加:

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
    LinearLayout roadMap = new LinearLayout(context);
    roadMap.setLayoutParams(params);
    this.addView(roadMap);  
然后重写
onDispatchDraw()
方法:

@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);
    Log.d("touchy touch", "dispatch draw called");

    canvas.drawColor(getResources().getColor(R.color.LIGHT_BLUE));
    /* recreate the blue rectangle on the canvas */
    path = new Path();
    path.moveTo(0.0f, 0.0f);        // Top Left
    path.lineTo(0.0f, 800.0f);      // Bottom Left
    path.lineTo(0.0f, 800.0f );     // Bottom Right
    path.lineTo(this.x, 0.0f);      // Top Right
    path.close(); 
    canvas.drawPath(path,paint);    
}
结果是我有一个透明的遮罩,它等于创建的路径。这不是问题所在。不幸的是,永远不会显示路线图。 我试图推翻:

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int count = this.getChildCount();
    Log.d("children please", "count: "+count);
    for (int i = 0; i < count; i++) {
        View child = this.getChildAt(i);
        child.layout(0, 0, child.getMeasuredWidth(), child.getMeasuredHeight());
        child.invalidate();
        child.bringToFront();
    }

}
@覆盖
仅受保护的void布局(布尔值已更改、int l、int t、int r、int b){
int count=this.getChildCount();
Log.d(“请孩子们”,“计数:+count”);
for(int i=0;i

但是,我尝试附加的线性布局仍然没有出现。

更改为扩展FrameLayout。 删除此行:

canvas.drawColor(getResources().getColor(R.color.LIGHT_BLUE));

然后我看到了路线图视图

为什么在dispatchDraw中添加视图???这是最糟糕的地方…你建议去哪里?我试图创建一个部分透明的布局。这应该是对to touch事件的响应。导致1000的原因是我每隔一天添加一次视图。扩展FrameLayout而不是ViewGroup并删除OnlayOut。没有改变任何事情。。。