移动拖放ImageButton时,ImageButtons被压扁

时间:2014-06-10 19:08:28

标签: java android mobile drag-and-drop imagebutton

所以我设置了4个普通的图像按钮,然后是拖放的第5个图像按钮。我希望4个非拖放图像按钮留在特定的位置,无论拖放的图像按钮发生什么。当我移动拖放图像按钮时,其他图像按钮会移动并且也会被挤压。

我知道如何在不影响其他图像按钮的情况下移动此拖放图像按钮吗?

这是我的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gllayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/mars" >

<TextView
    android:id="@+id/scores"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<ImageButton
    android:id="@+id/mainHut"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/mainhut" />

<ImageButton 
    android:id="@+id/polarCapButton1"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/polarcap" />

<ImageButton 
    android:id="@+id/polarCapButton2"
    android:layout_marginTop="-70dp"
    android:layout_marginLeft="575dp"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/polarcap" />

<ImageButton 
    android:id="@+id/spaceRockButton1"
    android:layout_marginTop="100dp"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/spacerock" />

<ImageButton 
    android:id="@+id/spaceRockButton2"
    android:layout_marginTop="-140dp"
    android:layout_marginLeft="520dp"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/spacerock" />

<ImageButton
    android:id="@+id/meteor"
    android:visibility="invisible"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/meteor" 
    android:layout_marginTop="-100dp"
    android:layout_marginLeft="400dp" />

</LinearLayout>

以下是我拖放图片按钮的代码:

    mainHut = (ImageButton) findViewById(R.id.mainHut);
    mainHut.setOnTouchListener(new OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            if (event.getAction() == MotionEvent.ACTION_DOWN)
            {
                mainHutSelected = true;
            }//end if

            if (event.getAction() == MotionEvent.ACTION_UP)
            {
                if (mainHutSelected == true)
                {
                    mainHutSelected = false;
                }//end if
            }//end if
            else if (event.getAction() == MotionEvent.ACTION_MOVE)
            {
                if (mainHutSelected == true)
                {
                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(v.getWidth(), v.getHeight());
                    params.setMargins((int)(event.getRawX() - event.getRawY() / 2), (int) (event.getRawY() - v.getHeight() * 1.5), (int) (event.getRawX() - v.getWidth() / 2), (int) (event.getRawY() - v.getHeight() * 1.5));
                    v.setLayoutParams(params);
                }//end if
            }//end else

            return false;
        }//end onTouch function

    });//end setOnClickListener

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我建议你使用FrameLayout。这将使您的图像视图可堆叠。

<FrameLayout>
    <ImageButton/> 
    <ImageButton/>
    <ImageButton/>
    <ImageButton/>
    <ImageButton/>
</FrameLayout>

您需要将它们全部设置为根据其父项来源在屏幕上具有静态位置。第5个ImageButton,您可以像使用它一样设置onTouch监听器。

编辑:或者你可以做这样的事情(如果你想保持线性布局):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gllayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/mars"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/scores"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ImageButton
            android:id="@+id/polarCapButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/polarcap"
            android:orientation="vertical" />

        <ImageButton
            android:id="@+id/polarCapButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="575dp"
            android:layout_marginTop="-70dp"
            android:background="@drawable/polarcap"
            android:orientation="vertical" />

        <ImageButton
            android:id="@+id/spaceRockButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="100dp"
            android:background="@drawable/spacerock"
            android:orientation="vertical" />

        <ImageButton
            android:id="@+id/spaceRockButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="520dp"
            android:layout_marginTop="-140dp"
            android:background="@drawable/spacerock"
            android:orientation="vertical" />

        <ImageButton
            android:id="@+id/meteor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="400dp"
            android:layout_marginTop="-100dp"
            android:background="@drawable/meteor"
            android:orientation="vertical"
            android:visibility="invisible" />
    </LinearLayout>

    <ImageButton
        android:id="@+id/mainHut"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="put offset here"
        android:background="@drawable/mainhut" />

</FrameLayout>

只需将mainHut上的marginTop更改为您想要设置的偏移量!

答案 1 :(得分:0)

不看你的XML文件,可能是由于使用了相对布局 - 4个静态按钮可能相对于正在移动的按钮定位,并且在拖放时会实时移动。尝试使用绝对定位(例如,android:layout_marginTop="30dp")而不是相对定位,或使用其他类型的布局。如果您可以将发生这种情况的活动发布到该布局的XML文件,那么这将更好地帮助提供一些信息以获得更合适的答案。

答案 2 :(得分:0)

我不确定这是不是你想要的。 但您可以使用窗口管理器使用浮动imageButton。但是这样按钮就是一个独立的叠加层,不再是4按钮视图的一部分。请参阅此帖子:What APIs in Android is Facebook using to create Chat Heads?