Java 拖放后如何排列图像

Java 拖放后如何排列图像,java,android,drag-and-drop,Java,Android,Drag And Drop,我的代码有点小问题。我正在开发拖放功能,用户可以将糖果从罐子拖到特定的目标。这个过程很好。但是,当我想将糖果从特定目标拖回罐子时,糖果相互重叠 下图显示糖果摆放整齐。在我把糖拖出来之前 然后,在糖果被拖放之后,看起来像是第二张图片 根据上面的图片,我把四颗糖果拖进罐子里。但是糖果是重叠的,这就是为什么你只能在罐子里看到一个糖果。罐子里应该有四颗糖果 那么,你能帮帮我吗。我怎样才能把我的糖果放回原处,这样当我把它们放回罐子后,它就会像第一张照片中的糖果一样被放回原处 这是代码

我的代码有点小问题。我正在开发拖放功能,用户可以将糖果从罐子拖到特定的目标。这个过程很好。但是,当我想将糖果从特定目标拖回罐子时,糖果相互重叠

下图显示糖果摆放整齐。在我把糖拖出来之前

然后,在糖果被拖放之后,看起来像是第二张图片

根据上面的图片,我把四颗糖果拖进罐子里。但是糖果是重叠的,这就是为什么你只能在罐子里看到一个糖果。罐子里应该有四颗糖果

那么,你能帮帮我吗。我怎样才能把我的糖果放回原处,这样当我把它们放回罐子后,它就会像第一张照片中的糖果一样被放回原处

这是代码

           case DragEvent.ACTION_DROP:
            // // Dropped, reassign View to ViewGroup
            ViewGroup owner = (ViewGroup) view.getParent();

            Log.i("drop", "Id First :" + view.getId());
            Log.i("drop", "Id Second :" + v.getId());
            Log.i("value", "Value :" + view.getContentDescription());

            owner.removeView(view);
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(88, 88);
            lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
            lp.addRule(RelativeLayout.RIGHT_OF, view.getId());


            if(v.getId()==R.id.jaroval)
            {
                RelativeLayout container = (RelativeLayout) v;
                container.addView(view,lp);
                value=container.getChildCount();
                view.setVisibility(View.VISIBLE);
            }
            else
            {

                GridLayout container2 = (GridLayout) v;
                container2.setColumnCount(5);
                container2.addView(view);
                cValue=container2.getChildCount();
                value=10-cValue;
                view.setVisibility(View.VISIBLE);

            }

            sound();
            break;

我认为这一行导致了问题:

lp.addRule(RelativeLayout.RIGHT_OF, view.getId());
您基本上是说,您当前添加的视图应该位于其右侧。相反,您需要提供添加到jar中的前一项的id。为此,只需存储最近添加的项目的id即可

实现此目的的示例代码:

//Create a variable that can be accessed and initialize it as -1
int mostRecentlyAddedView = -1;

//Then in the method you handle drag event
if(mostRecentlyAdddedView == -1){ //This is the very first view, therefore no need to add toRight layout.
   // update the variable
   mostRecentlyAdddedView = view.getId();

  // ... do other things here
} else {
  // ... other things
  RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(88, 88);
  lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
  lp.addRule(RelativeLayout.RIGHT_OF, mostRecentlyAdddedView);
  // ... other things
}

你能给我举一些例子,说明如何存储最近添加的项目的id吗?谢谢,谢谢。我试过这个密码。但是它不起作用。请问如果(v.getId()==R.id.jaroval)code,我应该把
放在哪里?在else语句或what?中,此if/else if仅用于确定要为要添加的视图设置哪些布局参数。您应该保留其余的代码。