2013-07-19 51 views
3

我想在每次触摸事件时更改图像视图上显示的图像。下面的代码完成了这一点。Android Imageview正在为之前的图像绘制新图像

public class TelephoneFragment extends Fragment { 

ImageView telephoneImageView; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.telephone_fragment, 
     container, false); 
    telephoneImageView = (ImageView)view.findViewById(R.id.telephoneImageView); 
    telephoneImageView.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN){ 
       telephoneImageView.setImageDrawable(getResources().getDrawable(R.drawable.telephone_clicked)); 
      } 
      if(event.getAction() == MotionEvent.ACTION_UP){ 
       telephoneImageView.setImageDrawable(getResources().getDrawable(R.drawable.telephone)); 
      } 
      return true;  
     } 
    }); 
    return view; 
    } 

}

当我改变了手机的方向,并尝试触摸图像再次,新的图像绘制在前面的图像有但是尽管这一个问题,那就是以前的图像在背景中仍然可见。有人能指导我发生什么事吗?谢谢。

- 我尝试使用setImageResource(),而不是setImageDrawable,但问题仍然存在。

+0

你试过了setImageBitmap –

+0

好吧,我也会试试。 – nave

+0

setImageBitMap也给出了同样的问题。 – nave

回答

0

您可以在设置第二个drawable之前通过以下操作执行此操作。

telephoneImageView.setImageResource(0); 

我没有试过以上,但如果它不工作,也尝试:

telephoneImageView.setImageResource(android.R.color.transparent); 

也可以尝试指定的ImageView为不可见,然后再设置回可见。这可能会触发重绘。你也可以尝试上述的组合,也许可以尝试telephoneImageView.invalidate()。

+0

不幸的是,两者都不起作用,似乎一旦方向改变,先前的图像在屏幕上以某种方式变得固定 – nave

+0

发生了什么事情是因为性能原因ImageView没有擦除其画布。所以你需要尝试找到的方法是强制重绘。也许是上面和telephoneImageView.invalidate()的组合。我不确定没有尝试自己。希望有所帮助。 –

+0

好吧,谢谢..android:configChanges =“orientation | screenSize”似乎已经做了伎俩......虽然我不知道为什么,它感觉像一个黑客... – nave