2013-05-17 66 views
0

我想讓一個應用程序拍攝一張照片並將其顯示在ImageView上。我的ImageView不刷新

我成功做到了這一點,但是當我嘗試拍攝新照片時,ImagaView的圖像沒有刷新。

例如:我按了一個按鈕,就創建了一個相機的意圖。我把圖片'A'保存在SD卡上的文件上,路徑爲'fileUri'。回到我的活動mImageView1顯示圖片'A'。很好,它有效。

我嘗試採取新的圖片「B」,我稱之爲意向的圖片保存在同一adress.The畫面corectly保存,但是當我在我的活動返回mImageView1顯示舊圖片「A '。 這裏是改變ImageView的形象代碼:

@Override 
public void onPause(){ 
    super.onPause(); 
    ((BitmapDrawable) mImageView1.getDrawable()).setCallback(null); 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
    try{ 
     if(bImageSaved) 
     { 
      mImageView1.setImageURI(fileUri); 
      mImageView1.postInvalidate(); 

     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     Log.e("Image2Notes", e.getMessage(), e); 
    } 

我嘗試不同的事情,刷新ImageView的:mImageView1.postInvalidate();mImageView1.draw(...);沒有更迭。

如果您有提示,我會很滿意。 謝謝

+0

我不知道這是你唯一的問題,但是'postInvalidate()'用於當你不在'UI'線程中。如果你在'UI'線程中,使用'invalidate()',你看起來像是 – codeMagic

+0

你在哪裏將文件路徑更改爲新圖片?你可能想使用'startActivityForResult()'然後返回值並在'onActivityResult()'中設置圖像' – codeMagic

+0

我叫'invalidate()'沒有成功。我已經在'onActivityResult()'中設置了圖像。我檢查了路徑,它是一樣的。我看了一下這幅畫。 SD卡上的圖片發生了變化,這是新圖片,只是在ImageView中是舊圖片。 –

回答

1

使用startActivityForResilt()開始您的相機活動的結果。然後覆蓋函數onActivityResult()。所以,當你的攝像頭活動完成onActivityResult()函數將被調用。在那個函數中,你可以改變圖像,而不是在onResume()中改變圖像。檢查onActivityResult()中的活動結果狀態。

+0

我已經這樣做了:'protected void onActivityResult(int requestCode,int resultCode,Intent data) { \t mAplicationState = 2; 如果(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE){ \t如果(resultCode爲== RESULT_OK){ \t \t Toast.makeText(此, 「圖像保存可以:\ n」 + fileUri.getPath(),Toast.LENGTH_LONG).show( ); \t \t bImageSaved = true; \t \t mImageView1.setImageURI(fileUri); \t \t \t} .... ' –