1

我正在尝试在 ViewGroup 的 onTouchEvent 上向 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

            }
        };

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

PS:我还尝试在将视图添加到 ViewGroup 之前设置视图的布局参数,但得到的结果相同。在将视图添加到 ViewGroup 后,我还在 LogCat 中打印了视图的宽度和高度,它始终显示为 0。我认为问题出在视图的宽度和高度设置的某个地方。

4

2 回答 2

1

如果您使用的是 custom ViewGroup,则必须实现该onLayout方法以显示任何内容。

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


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

用画布绘制

于 2013-10-14T11:47:16.670 回答
0

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

于 2013-10-14T11:45:46.187 回答