在ViewGroup中添加视图

时间:2013-10-14 11:38:53

标签: android view viewgroup

我正在尝试在ViewGroup的onTouchEvent上添加一个View到ViewGroup,代码如下:

        ViewGroup mDrawingCanvas = new ViewGroup(mContext) 
        {
            @Override
            public boolean isFocused() {
                // TODO Auto-generated method stub
                Log.d(TAG, "View's On focused is called !");
                return super.isFocused();
            }

            @Override
            public boolean onTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:

                    View vv = new View(mContext);
                    vv.setBackgroundColor(Color.GREEN);
                    vv.setLayoutParams(new LayoutParams(200, 200));
                    this.addView(vv);

                    Toast.makeText(mContext, "Views child count = "+this.getChildCount(), Toast.LENGTH_SHORT).show();;

                    break;

                return true;
            }

            @Override
            protected void onLayout(boolean changed, int l, int t, int r,
                    int b) {
                // TODO Auto-generated method stub

            }
        };

视图正被添加到Viewgroup,Toast在每个Touch Down事件上显示更大的视图计数,但视图未在ViewGroup的屏幕上显示。
我在StackOverflow上看过相关的问题,但我的问题是独一无二的 请指导我如何解决这个问题,非常感谢任何帮助。

P.S:我还尝试在将视图添加到ViewGroup之前设置视图的布局参数,但结果相同。在将其添加到ViewGroup后,我还在LogCat中打印了View的宽度和高度,它总是显示0.我认为问题出现在视图的宽度和高度设置的某处。

2 个答案:

答案 0 :(得分:1)

如果您使用的是自定义ViewGroup,则必须实施onLayout方法才能显示任何内容。

ViewGroup只是其他布局的基类,它本身不做任何事情。我建议使用其后代之一,如FrameLayoutLinearLayout


如果您正在创建绘图应用程序,可能更好地使用Canvas而不是使用自定义布局。 Canvas已经提供了几种绘制线条,圆形,矩形等的方法。如果您希望之后能够移动一个元素,那么您将有一些工作要做。

Draw with a Canvas

答案 1 :(得分:0)

您应该在onLayout方法中定义子视图在ViewGroup中的显示方式。 如果您不需要某些特殊视图,请尝试使用FrameLayout而不是ViewGroup