import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView iv;
Bitmap bTemp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button cameraClick = (Button) findViewById(R.id.click);
iv = (ImageView) findViewById(R.id.imageView1);
final Bitmap data = (Bitmap) getLastNonConfigurationInstance();
if (data == null) {
iv.setImageBitmap(bTemp);
}
cameraClick.setOnClickListener(myhandler);
}
OnClickListener myhandler = new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Bitmap bm = (Bitmap) data.getExtras().get("data");
iv.setImageBitmap(bm);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
@Deprecated
public Object onRetainNonConfigurationInstance() {
bTemp = iv.getDrawingCache();
return bTemp;
}
}
我正在使用imageview来存储使用Camera Intent捕获的图像,但当屏幕旋转时,图像丢失。我尝试使用onRetainNonConfigurationInstance(),但它不工作
我不想把图像写到文件里。
6条答案
按热度按时间pgky5nke1#
通过在清单文件中设置方向和屏幕大小标志,可以避免重新创建Activity
如果需要,您可以实现
onConfigurationChanged()
,它将在方向更改时调用。http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChangemzmfm0qo2#
这也许能帮你...
zf2sa74q3#
屏幕旋转时图像消失的原因是活动被破坏并重新创建。在此过程中,所选图像不会保留,因为您可以读取here
注意:每次用户旋转屏幕时,您的Activity都将被销毁并重新创建。当屏幕更改方向时,系统将销毁并重新创建前台Activity,因为屏幕配置已更改,您的Activity可能需要加载替代资源(如布局)。
如果您想保留选定的图像,则不应使用示例状态,因为您可以读取here。
系统使用onSaveInstanceState为您保存的捆绑包()回调-它不用于承载大型对象(如位图),并且其中的数据必须先序列化,然后再反序列化,这会消耗大量内存,并使配置更改变得很慢。在这种情况下,当你的Activity由于配置改变而重新启动时,你可以通过保留一个Fragment来减轻重新初始化Activity的负担。此片段可以包含对您希望保留的有状态对象的引用。
我实现了这个解决方案,您可以在我对另一个问题的回答中找到代码
mwecs4sa4#
返回位图,而不是返回您甚至没有构建的DrawingCache(顺便说一句
在onActivityResult中,将位图保存在bTemp中:
在保存配置时,保存此位图:
mutmk8jj5#
getLastNonConfigurationInstance()
返回一个Activity示例。您可以从该示例中获取以前的值:在您
onCreate()
:onRetainNonConfigurationInstance()
方法应该是:并且您的“onActivityResult()”方法应该是:
sq1bmfud6#
只需在活动活动标记中的清单文件中使用它