“.addView()”用于简单视图

时间:2016-08-01 21:23:27

标签: android android-layout

正如您在图像中看到的,我可以选择视图,并使用“_root.addView(dragIcon);”添加3个ImageView。

我的问题是视图是一个简单的视图而不是ViewGroup,这意味着在这张图片中我必须将3个图像添加到RelativeView背景“root.addView(dragIcon);”而不是图像中显示的绿色矩形视图。

我很确定我无法将View更改为ViewGroup,因为很多方法(例如onTouch)都需要“View”。我已经尝试将View转换为ViewGroup“((ViewGroup)视图).addView(dragIcon);”但那没用。

您可以在应用中制作多个视图并拖动它们,因此我需要将3个图像作为特定父视图的子视图。

感谢任何建议,谢谢!

The Image

以下是与此问题相关的代码部分......

_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");
                    }
                }
            });

1 个答案:

答案 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

让我知道你的进步。很乐意帮助你。

此致