协调ImageButtons的问题

时间:2014-11-27 05:44:56

标签: java android sqlite coordinates imagebutton

我正在编写一个Android应用程序/游戏,允许用户购买拖放图像按钮的建筑物(实现拖放api)。当用户拖动建筑物时,坐标会在删除时立即存储在sqlite数据库中。

假设用户购买了两座建筑物:第一座是殖民地,第二座是homeHut。然后,用户将两个建筑物放置在他们希望的任何地方,从而保存建筑物的坐标。问题是应用程序关闭然后再次打开。每当应用程序加载备份时,无论在哪里,第二个建筑物(homeHut)之前都会被放置在第一个建筑物(colonyHut)的位置。

我一直在与这个问题作斗争,我不确定为什么第一座建筑在第二座建筑物移动时会不断地占用第二座建筑物的坐标。

以下是我检查这两座建筑物之前是否已购买的代码。如果有,则动态创建它们并将其插入视图中。

    newHomeHutOneID = prefs.getInt("NewHomeHutOne", 0);
    if (newHomeHutOneID != 0)
    {
        data.open();
        homeHutOneX = data.getHomeHutOneX();
        homeHutOneY = data.getHomeHutOneY();
        data.close();
        newHomeHutFrame = (FrameLayout) findViewById(R.id.bottomHalf);
        newHomeHutOne = new ImageButton(getApplicationContext());
        newHomeHutOne.setBackgroundResource(R.drawable.homehut);
        newHomeHutOne.setTag("NewHomeHutOne");
        if (homeHutOneX == 0 && homeHutOneY == 0)
        {
            newHomeHutOne.setX(250);
            newHomeHutOne.setY(250);
        }//end if
        else
        {
            newHomeHutOne.setX(homeHutOneX - (newHomeHutOne.getWidth()/2));
            newHomeHutOne.setY(homeHutOneY - (newHomeHutOne.getHeight()/2));
        }//end else
        newHomeHutOne.setOnTouchListener(new BuildingsClick());
        findViewById(R.id.topHalf).setOnDragListener(new HomeHutDrag(getApplicationContext(), 1));
        findViewById(R.id.bottomHalf).setOnDragListener(new HomeHutDrag(getApplicationContext(), 1));
        FrameLayout.LayoutParams  param1 = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
        newHomeHutFrame.addView(newHomeHutOne, param1);
    }//end if

    newColonyHutOneID = prefs.getInt("NewColonyHutOne", 0);
    if (newColonyHutOneID != 0)
    {
        data.open();
        colonyHutOneX = data.getColonyHutOneX();
        colonyHutOneY = data.getColonyHutOneY();
        data.close();
        newColonyHutFrame = (FrameLayout) findViewById(R.id.bottomHalf);
        newColonyHutOne = new ImageButton(getApplicationContext());
        newColonyHutOne.setBackgroundResource(R.drawable.colonyhut);
        newColonyHutOne.setTag("NewColonyHutOne");
        Toast.makeText(getApplicationContext(), "colonyHutOne x: " + colonyHutOneX + " y: " + colonyHutOneY, Toast.LENGTH_SHORT).show();
        if (colonyHutOneX == 0 && colonyHutOneY == 0)
        {
            newColonyHutOne.setX(250);
            newColonyHutOne.setY(250);
        }//end if
        else
        {
            newColonyHutOne.setX(colonyHutOneX - (newColonyHutOne.getWidth()/2));
            newColonyHutOne.setY(colonyHutOneY - (newColonyHutOne.getHeight()/2));
        }//end else
        newColonyHutOne.setOnTouchListener(new BuildingsClick());
        findViewById(R.id.topHalf).setOnDragListener(new ColonyHutDrag(getApplicationContext(), 1));
        findViewById(R.id.bottomHalf).setOnDragListener(new ColonyHutDrag(getApplicationContext(), 1));
        FrameLayout.LayoutParams  param1 = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
        newColonyHutFrame.addView(newColonyHutOne, param1);
    }//end if

我已经检查了数据库,我可以看到坐标被正确保存并正在保存以获得正确的imageButton,所以我不知道为什么会这种情况继续发生。

如果您认为需要更多信息,请告诉我们。我迷路了,可以在这里使用任何想法。

我感谢任何可能的帮助。谢谢你们!

1 个答案:

答案 0 :(得分:0)

当我意识到每个拖放建筑都没有单独的onDragListener时,这个问题就解决了。只能使用一个onDragListener然后我设置了一种不同的方法来识别正在拖动哪个建筑物,以便保存正确建筑物的坐标。