2015-03-31 45 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")); 
     } 
    }