android 拍照并显示在imageview中,从系统相册或者拍照获得图片,剪裁后显示在imageview中...

该博客讨论了Android应用程序中遇到的两个问题:1) 用户在选择照片裁剪后,程序意外退出;2) 使用相机拍摄照片后,无法进入裁剪界面。作者提供了相应的代码片段,展示了如何启动相机、调用相册以及设置裁剪操作,但这些代码似乎存在bug,导致用户交互时出现问题。博客主要关注Android开发中的图片处理和用户界面交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现的问题:

1.在选取照片进行裁剪后点击确定时,自动退出了程序。

2.在调用相机拍摄时,无法点击确定,就是无法进入裁剪界面。

我的代码如下:

`public class MainActivity extends Activity implements OnClickListener {

private Button camera;

private Button gallery;

private ImageView iv;

private File tempFile = new File(Environment.getDataDirectory(),

getPhotoFileName());

/**

* 调用相机

*/

private final int TOCAMERA = 1;

/**

* 调用相册

*/

private final int TOGALLERY = 2;

/**

* 调用裁剪

*/

private final int TOCROP = 3;

private static final String IMAGE_UNSPECIFIED = "image/*";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

camera = (Button) findViewById(R.id.camera);

gallery = (Button) findViewById(R.id.gallery);

iv = (ImageView) findViewById(R.id.iv);

camera.setOnClickListener(this);

gallery.setOnClickListener(this);

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.camera:

Intent intent0 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

if (!tempFile.exists()) {

tempFile.getParentFile().mkdirs();

}

System.out.println(tempFile.getAbsolutePath());

intent0.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));

startActivityForResult(intent0, TOCAMERA);

break;

case R.id.gallery:

Intent intent1 = new Intent(Intent.ACTION_PICK, null);

intent1.setDataAndType(

MediaStore.Images.Media.INTERNAL_CONTENT_URI,

IMAGE_UNSPECIFIED);

startActivityForResult(intent1, TOGALLERY);

break;

default:

break;

}

}

public void startPhotoZoom(Uri uri) {

Intent intent = new Intent("com.android.camera.action.CROP");// 调用Android系统自带的一个图片剪裁页面,

intent.setDataAndType(uri, IMAGE_UNSPECIFIED);

intent.putExtra("crop", "true");// 进行修剪

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX outputY 是裁剪图片宽高

intent.putExtra("outputX", 300);

intent.putExtra("outputY", 500);

intent.putExtra("return-data", true);

startActivityForResult(intent, TOCROP);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// TODO Auto-generated method stub

if (data == null) {

return;

}

switch (requestCode) {

case TOGALLERY:

startPhotoZoom(data.getData());

break;

case TOCROP:

Uri originalUri = data.getData();

if (originalUri == null) {

return;

}

Bitmap bm = Utils.getBitpMap(this, originalUri);

iv.setImageBitmap(bm);

break;

case TOCAMERA:

// 设置文件保存的路径

startPhotoZoom(Uri.fromFile(tempFile));

break;

default:

break;

}

super.onActivityResult(requestCode, resultCode, data);

}

private String getPhotoFileName() {

Date date = new Date(System.currentTimeMillis());

SimpleDateFormat dateFormat = new SimpleDateFormat(

"'IMG'_yyyyMMdd_HHmmss");

return dateFormat.format(date) + ".jpg";

}

}

`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值