【发布时间】:2014-08-07 22:41:37
【问题描述】:
我有一个对话框菜单设置供用户选择他们想要建造的建筑物。当他们按下购买按钮时,建筑物会自动插入到活动中。问题是,当购买了不止一个时,移动最近购买的建筑物也会移动第二最近购买的建筑物。我不积极如何解决这个问题。我会看看将新建筑物设置为框架布局而不是线性布局是否会有所帮助,但如果我这样做,我的拖放将不起作用。
这是按下购买按钮后正在设置的图像按钮的代码:
layout = (LinearLayout) findViewById(R.id.newColonyHutLayout);
buyColonyHut = (Button) buildingSelect.findViewById(R.id.buyColonyHut);
buyColonyHut.setText("Buy");
buyColonyHut.setBackgroundColor(-65536);
buyColonyHut.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//get current amount of rock and check if it is enough to buy
data = new Database(runGraphics.this);
data.open();
rockAmount = data.getRockAmount();
data.close();
if (rockAmount >= 100)
{
//take away spent money and update database
data.open();
rockAmount -= 100;
data.rockAmountEntry(rockAmount);
data.close();
//update the scores
updateScores();
//close the dialog
buildingSelect.dismiss();
buildMoreButton.setBackgroundColor(-65536);
//they have enough rock, build the building
newColonyHut = new ImageButton(runGraphics.this);
newColonyHut.setBackgroundResource(R.drawable.mainhut);
newColonyHut.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
layout.addView(newColonyHut);
newColonyHut.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
newColonyHutSelected = true;
}//end if
if (event.getAction() == MotionEvent.ACTION_UP)
{
if (newColonyHutSelected == true)
{
newColonyHutSelected = false;
}//end if
}//end if
else if (event.getAction() == MotionEvent.ACTION_MOVE)
{
if (newColonyHutSelected == true)
{
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(v.getWidth(), v.getHeight());
params.setMargins((int)(event.getRawX() - event.getRawY() / 5), (int) (event.getRawY() - v.getHeight()), (int) (event.getRawX() - v.getWidth() / 5), (int) (event.getRawY() - v.getHeight()));
v.setLayoutParams(params);
}//end if
}//end else
return false;
}//end onTouch function
});//end setOnTouchListener
}//end onClick function
});//end onClickListener
这里是xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/newColonyHutLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ImageButton
android:id="@+id/newColonyHut"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/mainhut" />
</LinearLayout>
</FrameLayout>
【问题讨论】:
-
如果要实现拖放,可以使用android提供的拖放。它可以在 API 级别 11 及更高级别上工作。 developer.android.com/guide/topics/ui/drag-drop.html
-
stackoverflow.com/questions/8570982/…查看此链接,也许它有助于避免多点触控。
标签: java android drag-and-drop imagebutton android-framelayout