我创建了一个拖放应用程序,允许用户从顶部拖动4个图像并在底部按顺序放置它们。我在顶部有4个图像视图,在底部有4个图像视图。把它们放下工作完美无缺,然而当我试图将它们左右移动时,我遇到了问题。
我有2个临时图像视图,我将它们设置为等于图像视图。如果我将图像从图像视图6移动到图像视图5,则应该交换图像,但是它仅将图像视图6改变为图像视图5并且图像视图5保持相同。
以下是我尝试更改图片的代码段
droppedSwap 等于用户选择移动的图像
dropTargetSwap 等于用户想要图像的位置
if (dropTargetSwap.equals(ivHero5) && droppedSwap.equals(ivHero6))
{
//set temp imageview that is equal to ivHero5
ImageView tempDropTarget = ivHero5;
//set temp imageview that is equal to ivHero6
ImageView tempDropped = ivHero6;
//supposed to set ivHero6 to ivHero5 image
droppedSwap.setBackground(tempDropTarget.getBackground());// working
//supposed to set ivHero5 to ivHero6 image
dropTargetSwap.setBackground(tempDropped.getBackground());// not working
}
答案 0 :(得分:1)
你的问题在于:
ImageView tempDropTarget = ivHero5;
ImageView tempDropped = ivHero6;
你实际上并没有创建临时副本,而是引用原始对象,所以当你执行了DropSwap.setBackground()时,你实际上是在设置ivHero6背景,当你执行tempDropped.getBackground()时,你和#39;重新获得之前更改的ivHero6背景。 您应该使用以下方法创建背景的副本,这些背景是可绘制的:
Drawable copy1 = ivHero5.getBackground().getConstantState().newDrawable();
Drawable copy2 = ivHero6.getBackground().getConstantState().newDrawable();