Android,重叠imageViews

时间:2014-05-27 05:25:09

标签: android drag-and-drop draggable overlap

我正在以编程方式ImageViews创建并以相同的布局拖动它们。

我想禁用此ImageView的重叠。当我以编程方式或其他方式创建每个ImageView时,是否有应用于禁用重叠的设置?

public class MainActivity extends ActionBarActivity {

    private int offset_x = 0;
    private int offset_y = 0;
    RelativeLayout canvas;
    LinearLayout buttonslayout;
    boolean isselected = false;
    View selected_item = null;
    int test1,test2;
    Button save,newdoor,newwindow,rotate;
    TextView xcoord,ycoord;
    //static final int SNAP_GRID_INTERVAL = 43;
    static final int SNAP_GRID_INTERVAL = 44;
    static final int SNAP_GRID_INTERVAL2 = 25;
    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        canvas = (RelativeLayout) findViewById(R.id.container2);
        ViewGroup vg = (ViewGroup)findViewById(R.id.container3);
        //buttonslayout = (LinearLayout) findViewById(R.id.container3);

        save = (Button) findViewById(R.id.savebtn);
        newdoor = (Button) findViewById(R.id.btnnewdoor);
        newwindow = (Button) findViewById(R.id.btnnewwindow);
        xcoord = (TextView) findViewById(R.id.xcoord);
        ycoord = (TextView) findViewById(R.id.ycoord);
        rotate = (Button) findViewById(R.id.rotate);

        newwindow.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                final int lungime = 66;
                final int inaltime = 20;
                final int []lastcoords = new int[2];
                final int canvasWidth = canvas.getWidth();
                final int canvasHeight = canvas.getHeight();
                RelativeLayout mylayout = (RelativeLayout) findViewById(R.id.container2);
                final View canvas = ((View) v.getParent());
                final int []coordwall = new int[2];
                mylayout.getLocationInWindow(coordwall);
                final ImageView image = new ImageView(getBaseContext());
                image.setBackgroundResource(R.drawable.element_window);
                mylayout.addView(image);
                image.setOnTouchListener(new View.OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        // TODO Auto-generated method stub
                         switch(event.getAction())
                            {
                                    case MotionEvent.ACTION_DOWN:
                                            offset_x = (int)event.getX();
                                            offset_y = (int)event.getY();
                                            selected_item = v;
                                            isselected = true;
                                            xcoord.setText("X: "+lastcoords[0]);
                                            ycoord.setText("Y: "+lastcoords[1]);
                                            Log.i("test","Isselected = "+isselected);
                                            break;

                                    default:
                                            break;
                            }

                            return false;
                    }
                });

                rotate.setOnClickListener(new View.OnClickListener() {

                    int grad=0;
                    @Override
                    public void onClick(View arg0) {
                        // TODO Auto-generated method stub
                        if(grad!=1)
                        {
                            image.setRotation(90);
                            grad=1;
                        }
                        else
                        {
                            image.setRotation(180);
                            grad=0;
                        }

                    }
                });

                mylayout.setOnTouchListener(new View.OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        // TODO Auto-generated method stub
                        MarginLayoutParams marginParams = new MarginLayoutParams(v.getLayoutParams());
                        switch(event.getAction())
                        {
                        case MotionEvent.ACTION_UP:
                            isselected = false;
                            Log.i("test","Isselected = "+isselected);
                            break;

                        case MotionEvent.ACTION_MOVE:
                            if(isselected == true)
                            {
                            View canvas = ((View) v.getParent());
                            final int width = v.getWidth() / 2, height = v.getHeight() / 2;


                            int x = (int)event.getX() - offset_x;
                            int y = (int)event.getY() - offset_y;

                            int w = getWindowManager().getDefaultDisplay().getWidth() - 100;
                            int h = getWindowManager().getDefaultDisplay().getHeight() - 100;
                            int rawX = (int) event.getRawX(), rawY = (int) event.getRawY();
                            int x_coord = (int) event.getRawX() - coordwall[0] - width;
                            int y_coord = (int) event.getRawY() - coordwall[1] - height;

                            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                                        new ViewGroup.MarginLayoutParams(
                                                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                                                        RelativeLayout.LayoutParams.WRAP_CONTENT));

                            if (rawY < coordwall[1] + inaltime / 2)
                                lp.topMargin = 0;
                            else
                                if (rawY >= coordwall[1] + canvasHeight - inaltime )
                                    lp.topMargin = canvasHeight - inaltime*2;
                                else
                                    lp.topMargin = y   / SNAP_GRID_INTERVAL  * SNAP_GRID_INTERVAL;

                            if(rawX < coordwall[0] + lungime / 2)
                                lp.leftMargin = 0;
                                else
                                    if(rawX >= coordwall[0] + canvasWidth - lungime)
                                    {
                                        lp.leftMargin = canvasWidth - lungime*2;
                                        Log.i("arry","leftmargin = " + lp.leftMargin);
                                    }
                                    else
                                        lp.leftMargin = x  / SNAP_GRID_INTERVAL  * SNAP_GRID_INTERVAL;
                            lastcoords[0] = lp.leftMargin;
                            lastcoords[1] = lp.topMargin;
                            xcoord.setText("X: "+lp.leftMargin);
                            ycoord.setText("Y: "+lp.topMargin);
                             lp.setMargins(lp.leftMargin, lp.topMargin, 0, 0);


                                                    selected_item.setLayoutParams(lp);
                            }
                                                break;

                                        default:
                                                break;
                        }
                        return true;
                }
                });

            }
        });

和xml:

    LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:id="@+id/container"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="#000000"
       android:orientation="horizontal"
       tools:context="com.example.draganddrop.MainActivity"
       tools:ignore="MergeRootFrame" >

    <LinearLayout
        android:id="@+id/container3"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="#848484"
        android:orientation="vertical" >

        <Button
            android:id="@+id/savebtn"
            style="@drawable/new_wall"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:background="@drawable/new_wall"
            android:textSize="13sp" />

        <Button
            android:id="@+id/btnnewwindow"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:background="@drawable/new_window"
            android:textSize="13sp" />

        <Button
            android:id="@+id/btnnewdoor"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:background="@drawable/new_door"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/xcoord"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:text="X: " />

        <TextView
            android:id="@+id/ycoord"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:text="Y: " />

        <Button
            android:id="@+id/rotate"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Rotate" />

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/container2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF" >

    </RelativeLayout>

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

目前还不是很清楚你想要做什么,但如果我理解你的方法正确,你想要以编程方式将一些ImageView设置为布局吗?为什么你的观点重叠?我想你必须为你的视图容器设置布局参数:

    //after onCreate in the activity, create the LinearLayout (for example)
    //and set the LayoutParams, if You have no one declared in Your xml

    LinearLayout linearLayout= new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);

    linearLayout.setLayoutParams(new LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));

    //then create the imageView, set the image inside and add it to the container

    ImageView imageView = new ImageView(this);        
    imageView.setImageResource(R.drawable.your_image);
    imageView.setLayoutParams(new LayoutParams(
    LayoutParams.MATCH_PARENT,
    LayoutParams.WRAP_CONTENT));


    linearLayout.addView(imageView);

    //set all as content
    setContentView(linearLayout);
你用这种方式做过吗?如果没有,请尝试一下,如果你想设置多个imageViews或其他一些布局,你必须使用LayoutParams进行一些操作。