编辑我更新了代码以反映两个答案中建议的更改,不幸的是,现在我的应用程序部队关闭了。错误列在底部
这是我的相机/图片类的全部内容(除了import
s)这个类应该拍照,将它显示在屏幕上,让另一个类具有图片的字符串路径用作附件。
它拍摄的图片很好,它可以很好地通过电子邮件发送图片,但我无法弄清楚如何在拍摄后将图片显示出来。我知道那里有一些草率的代码(比如onActivityResult
)但是除了
Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);
效果很好,所以我对寻找解决方案非常感兴趣。关于如何清理它的任何其他建议也非常受欢迎,这只是从多个不同的来源蹒跚而行。
public class LooksLike extends Activity
{
Button camera;
Intent intent;
static String image_string;
ImageView imageview;
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.lookslike);
camera = (Button) findViewById(R.id.camera);
imageview = (ImageView) findViewById(R.id.debris_view);
camera.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
takePhoto();
}
});
}
public void takePhoto()
{
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this)) );
startActivityForResult(intent, 1);
Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);
}
private File getTempFile(Context context)
{
File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName() );
if(!path.exists())
path.mkdir();
return new File(path, "debris.jpg");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK)
{
switch(requestCode)
{
case 1:
final File file = getTempFile(this);
try
{
Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
image_string = Uri.fromFile(file).toString();
Bitmap bm = Bitmap.createScaledBitmap(
BitmapFactory.decodeFile(image_string),
getResources().getDisplayMetrics().widthPixels,
getResources().getDisplayMetrics().heightPixels,
true);
imageview = (ImageView) findViewById(R.id.debris_view);
imageview.setImageBitmap(bm);
}
catch (FileNotFoundException e)
{
Toast.makeText(getApplicationContext(), "file not found exception", Toast.LENGTH_SHORT).show();
}
catch (IOException e)
{
Toast.makeText(getApplicationContext(), "ioexception", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
}
另外,这是我的xml文件:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/debris_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerCrop"
android:src="@drawable/icon"
/>
<Button
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dip"
android:layout_gravity="center_horizontal|bottom"
android:padding="12dip"
android:background="#AA000000"
android:textColor="#ffffffff"
android:text="would you like to take a new debris picture?"
/>
</merge>
答案 0 :(得分:3)
您需要将这两行移动到onActivityResult():
case 1:
final File file = getTempFile(this);
try {
Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
image_string = Uri.fromFile(file).toString();
Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);
} catch (FileNotFoundException e) {
...
takePhoto()
中的代码将在startActivityForResult()
之后立即执行(即它不会等待完成被调用的活动)。处理结果必须在onActivityResult()
。
答案 1 :(得分:1)
移动
Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);
从takePhoto
到
try
{
Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
image_string = Uri.fromFile(file).toString();
Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);
}
catch (FileNotFoundException e)
答案 2 :(得分:0)
您正在加载的图片可能太大了。 将要在屏幕上显示的图像缩小到较小的尺寸,它应该没问题。 logcat应该显示一些有用的东西。