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仅用于确定要为要添加的视图设置哪些布局参数。您应该保留其余的代码。