РЕДАКТИРОВАТЬ Я обновил код, чтобы отразить изменения, предложенные в обоих ответах, к сожалению, теперь мое приложение закрывается. ошибка указана внизу
это мой класс камеры / изображения в полном объеме (за исключением import
с), этот класс должен делать снимок, отображать его на экране и позволять другому классу иметь строковый путь к изображению для использования в качестве приложение.
он делает снимок в порядке, он отправляет его по электронной почте, но я не могу понять, как заставить его отображать изображение после его съемки. я знаю, что там есть какой-то небрежный код (как в 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>