在drop上更改imageview背景

时间:2015-03-13 10:51:07

标签: android android-imageview

我创建了一个拖放应用程序,允许用户从顶部拖动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
            }

1 个答案:

答案 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();