我正在尝试在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.我认为问题出现在视图的宽度和高度设置的某处。
答案 0 :(得分:1)
如果您使用的是自定义ViewGroup
,则必须实施onLayout
方法才能显示任何内容。
ViewGroup
只是其他布局的基类,它本身不做任何事情。我建议使用其后代之一,如FrameLayout
或LinearLayout
。
如果您正在创建绘图应用程序,可能更好地使用Canvas
而不是使用自定义布局。 Canvas
已经提供了几种绘制线条,圆形,矩形等的方法。如果您希望之后能够移动一个元素,那么您将有一些工作要做。
答案 1 :(得分:0)
您应该在onLayout方法中定义子视图在ViewGroup中的显示方式。 如果您不需要某些特殊视图,请尝试使用FrameLayout而不是ViewGroup