所以我设置了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
提前感谢您的帮助。
答案 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?