2015-03-31 40 views
0

我正在使用android工作室,我讓我的應用程序工作,按下按鈕打開我的三星星系相機並拍照。然後,我可以保存圖片,並將其顯示在應用程序中的圖像視圖中。但是從今天開始,圖片不會顯示在圖像視圖中。在我拍照之後它仍然會保存但消失。如果我將手機放在一邊,首先會出現圖像,但是一旦筆直拿着設備,圖像就會消失。我不明白這可能是什麼,我對android工作室和編碼一般都是新手。如果有人可以幫助,將不勝感激:)?此外,當圖像消失時,此錯誤出現在日誌中:32351-32351/com.andyexample.myapplication E/ViewRootImpl:sendUserActionEvent()mView == null。在Imageview中顯示捕獲的圖片的問題(Android工作室)

CODE FOR主要活動:

公共類的MainMenu延伸ActionBarActivity {

static final int REQUEST_IMAGE_CAPTURE = 1; 
ImageView imageView; 


//Drawable dirty; 
//Bitmap bitmapImage; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 


    imageView = (ImageView) findViewById(R.id.imageView); 
    Button openCamera = (Button) findViewById(R.id.openCamera); 
    Button buttonFilter = (Button) findViewById(R.id.buttonFilter); 





} 



//launching the camera 

public void launchCamera(View view){ 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    //Take the picture taken along to a result activity 
    startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); 

    } 

//if you want to save image 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){ 

     //Get Photo 
     Bundle extras = data.getExtras(); 
     Bitmap photo = (Bitmap) extras.get("data"); 
     imageView.setImageBitmap(photo); 



    } 
} 
+0

此外,當圖像dissappears..this出現在日誌中的應用在:32351-32351/com.andyexample.myapplication E/ViewRootImpl:sendUserActionEvent()MView的== NULL – 2015-03-31 18:26:24

+1

你一定要明白,當你旋轉一個Android設備從橫向到縱向(反之亦然),'活動'被破壞並完全重新創建?換句話說,從相機檢索到的位圖將會丟失,並且'ImageView'只是重新創建,但在拍攝另一張照片之前它將一直是空白的。 – Squonk 2015-03-31 18:35:26

回答

0

如@Squonk所描述的,作爲活性破壞並重新創建的位圖時,旋轉設備丟失,(所以它可以在新的方向創建它的佈局)。

因此,您需要在活動被銷燬時保存位圖,並在活動重新創建時將其讀回。

你可以做到這一點,如下所示:

// save the Activity's instance state as it gets destroyed 
    @Override 
    public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelable("bitmap", bitmap); 
    } 

// restore any saved instance state 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 
    imageView = (ImageView) findViewById(R.id.imageView); 

    if (savedInstanceState != null) { 
     bitmap = savedInstanceState.getParcelable("bitmap"); 
    } 

    if(bitmap != null) { 
     imageView.setImageBitmap(photo); 
    } 
} 

注意,你將不得不作出「位圖」活動的一個實例成員,而不是一個局部變量。

+0

感謝球員們,我現在明白了,但我必須補充一點,即使我將手機放在肖像位置,屏幕仍然會出現風景,然後旋轉以匹配手機,然後圖像就會顯示出來。我做錯了嗎? – 2015-03-31 23:00:41

+0

另外,我把你給我的代碼,謝謝你的方式,它給我錯誤的位圖和照片說不能解決符號? – 2015-03-31 23:10:01

+0

向我們展示錯誤? – GreyBeardedGeek 2015-04-01 02:51:51

0

我發現你的問題。我也遇到了這個問題。但這是通過保存該uri和saveInstance並恢復該savedInstance來解決的。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){ 

     //Get Photo 
     Uri mImageCaptureUri = data.getData(); 
     imageView.setImageUri(mImageCaptureUri); 



    } 
} 



@Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     if (mImageCaptureUri != null) { 
      outState.putString("cameraImageUri", mImageCaptureUri.toString()); 
     } 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
     if (savedInstanceState.containsKey("cameraImageUri")) { 
      mImageCaptureUri = Uri.parse(savedInstanceState.getString("cameraImageUri")); 
     } 
    }