正如您在图像中看到的,我可以选择视图,并使用“_root.addView(dragIcon);”添加3个ImageView。
我的问题是视图是一个简单的视图而不是ViewGroup,这意味着在这张图片中我必须将3个图像添加到RelativeView背景“root.addView(dragIcon);”而不是图像中显示的绿色矩形视图。
我很确定我无法将View更改为ViewGroup,因为很多方法(例如onTouch)都需要“View”。我已经尝试将View转换为ViewGroup“((ViewGroup)视图).addView(dragIcon);”但那没用。
您可以在应用中制作多个视图并拖动它们,因此我需要将3个图像作为特定父视图的子视图。
感谢任何建议,谢谢!
以下是与此问题相关的代码部分......
_root = (ViewGroup)findViewById(R.id.root); //This is the background
_view = new View(this); //This is the View (Green in the Image)
private void selectView(final View view) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(final View view, final MotionEvent event) {
view.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ImageView dragIcon, sizeIconTop, sizeIconBottom;
if (view.getTag(R.string.viewSelected) != "1") {
view.setBackgroundColor(0xFF00AA00);
view.setTag(R.string.viewSelected, "1");
double Ypos = view.getTranslationY() - view.getHeight() / 2;
// Set draggable (6*3 grid on the right)
dragIcon = new ImageView(MainActivity.this);
dragIcon.setImageResource(R.drawable.drabicon);
RelativeLayout.LayoutParams imgParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
imgParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
imgParams.setMargins(0,0,30,0);
dragIcon.setLayoutParams(imgParams);
dragIcon.setTranslationY((float) Ypos + 70 + view.getHeight() / 2);
_root.addView(dragIcon); //Need to change from _root.addView to view.addView
// Set size top (White line at the top)
sizeIconTop = new ImageView(MainActivity.this);
sizeIconTop.setImageResource(R.drawable.resize);
RelativeLayout.LayoutParams stImgParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
stImgParams.setMargins(0,0,30,0);
stImgParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
sizeIconTop.setLayoutParams(stImgParams);
sizeIconTop.setTranslationY((float) Ypos + 99);
_root.addView(sizeIconTop); //Need to change from _root.addView to view.addView
// Set size bottom (White line at the bottom)
sizeIconBottom = new ImageView(MainActivity.this);
sizeIconBottom.setImageResource(R.drawable.resize);
RelativeLayout.LayoutParams sbImgParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
sbImgParams.setMargins(0,0,30,0);
sbImgParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
sizeIconBottom.setLayoutParams(sbImgParams);
sizeIconBottom.setTranslationY((float) Ypos + 93 + view.getHeight());
_root.addView(sizeIconBottom); //Need to change from _root.addView to view.addView
} else { //Ignore this part
//((ViewGroup) view).removeView(dragIcon);
//((ViewGroup) view).removeView(sizeIconTop);
//((ViewGroup) view).removeView(sizeIconBottom);
view.setBackgroundColor(0xFF00FF00);
view.setTag(R.string.viewSelected, "0");
}
}
});
答案 0 :(得分:1)
即使这个问题有点混乱,在分析了你的代码后,我想出了你想做什么 不幸的是,您必须选择是使用查看(并且无法附加ImageView)或使用 ViewGroup (并自行处理事件)。
由于您的View是一个视图,并且您的3个ImageView也是视图(意味着它们处于相同的使用级别),因此您无法将最后3个添加到第一个。
规则是: 您可以将ViewGroups和Views添加到ViewGroup,但不能将View或ViewGroup添加到View。视图应该是Android设计的基本块。
void addView (View child)
添加子视图。如果没有布局参数 已经在子项上设置了默认参数 ViewGroup在子项上设置。
在我看来,我会自己制作View ViewGroup并照顾 TouchEvents 。
Check this documentation/code regarding TouchEvents on ViewGroups
让我知道你的进步。很乐意帮助你。
此致