安卓中选择系统图库的图片及调用相机的源码(原创)
16lz
2022-08-06
在Android开发中经常会用到图片的上传功能,一般常用的是调用Android系统自带的图库及拍照功能。示例代码如下:
在MainActivity.java中
import java.io.ByteArrayOutputStream;import java.io.File;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity {private Button btn1,btn2;private ImageView img;public final static int PHOTO_ZOOM = 0; public final static int TAKE_PHOTO = 1; public final static int PHOTO_RESULT = 2; public static final String IMAGE_UNSPECIFIED = "image/*"; private String imageDir;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);img = (ImageView) findViewById(R.id.avatar);btn1 = (Button) findViewById(R.id.selector);btn2 = (Button) findViewById(R.id.paizhao);btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(IMAGE_UNSPECIFIED); Intent wrapperIntent=Intent.createChooser(intent, null); startActivityForResult(wrapperIntent, PHOTO_ZOOM);}});btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) { imageDir = "temp.jpg"; Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), imageDir))); startActivityForResult(intent, TAKE_PHOTO);}});}// 图片缩放public void photoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, IMAGE_UNSPECIFIED); intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 250); intent.putExtra("outputY", 250); intent.putExtra("return-data", true); startActivityForResult(intent, PHOTO_RESULT); }@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (resultCode == RESULT_OK) { if (requestCode == PHOTO_ZOOM) { photoZoom(data.getData()); } if (requestCode == TAKE_PHOTO) { File picture = new File(Environment.getExternalStorageDirectory() + "/" + imageDir); photoZoom(Uri.fromFile(picture)); } if (requestCode == PHOTO_RESULT) { Bundle extras = data.getExtras(); if (extras != null) { Bitmap photo = extras.getParcelable("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG, 75, stream); img.setImageBitmap(photo); } } }super.onActivityResult(requestCode, resultCode, data);}}
activity_main.xml中
效果如图: 因为时间关系,界面就谁便做了,请见谅!!!!!!!!!!!!!!!!!!!!
更多相关文章
- Android(安卓)matrix 控制图片的旋转、缩放、移动
- [Android(安卓)NDK]Android(安卓)JNI开发例子 ---3 在JNI中实现o
- android拍照与读取相册
- Android(安卓)报错:Caused by: android.os.FileUriExposedExcepti
- android 拨打紧急号码,通话时开启免提功能实现
- Android(安卓)下拉刷新,非常强大的下拉刷新功能
- Android中判断网络功能是否可用
- android解决坚屏拍照和保存图片旋转90度的问题,并兼容4.0
- [Android]在App中使用相机