Android实现照片选择显示-从相册选择或拍照选择
2014-04-04 18:05
543 查看
需要上传图片的地方的都会有图片选择这项功能,Android当然也可以实现,下面我主要说下最普通寻常的功能,从相册选择图片或拍照,并将图片显示出来。由于这个小功能代码简单,直接贴代码,大家参考下吧。
这次又是无图无真相,不过代码可以直接run起来、
这次又是无图无真相,不过代码可以直接run起来、
public class PhotoChooser extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //以下是界面布局,没有在xml界面中,直接new出来了 LinearLayout allLayout = new LinearLayout(this); allLayout.setOrientation(LinearLayout.VERTICAL); LinearLayout buttonLine = new LinearLayout(this); Button choose1 = new Button(this); Button choose2 = new Button(this); choose1.setText("相册选取"); choose2.setText("拍照选取"); choose1.setOnClickListener(new View.OnClickListener() { //打开相册选取 @Override public void onClick(View v) { Intent it = new Intent(); it.setType("image/*"); it.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(it, 2); } }); choose2.setOnClickListener(new View.OnClickListener() { //打开照相机拍照选取 @Override public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); } }); buttonLine.addView(choose1); buttonLine.addView(choose2); imageView = new ImageView(this); imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); allLayout.addView(buttonLine); allLayout.addView(imageView); setContentView(allLayout); scale = getResources().getDisplayMetrics().density; } ImageView imageView; float scale; //这个方法我只知道是为了适应不同屏幕的显示,具体还真不理解,先用着吧 public int getPixel(int old) { return (int) (old * scale + 0.5f); } //由于Intent使用的是 startActivityForResult,调用此回调方法接受返回数据,即照片。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null) { Uri mImageCaptureUri = data.getData(); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(getPixel(300), getPixel(250)); params.setMargins(0, 15, 0, 15); if (mImageCaptureUri != null) { try { //这个方法是根据Uri获取Bitmap图片的静态方法 Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageCaptureUri); // 获取屏幕分辨率 DisplayMetrics dm_2 = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm_2); // 图片分辨率与屏幕分辨率比例 float scale_2 = bitmap.getWidth() / (float) dm_2.widthPixels; Bitmap newBitMap = null; if (scale_2 > 1) { newBitMap = zoomBitmap(bitmap, bitmap.getWidth() / scale_2, bitmap.getHeight() / scale_2); bitmap.recycle(); } if (newBitMap != null) { imageView.setImageBitmap(newBitMap); } else { imageView.setImageBitmap(bitmap); } imageView.setLayoutParams(params); } catch (Exception e) { e.printStackTrace(); } } else { Bundle extras = data.getExtras(); if (extras != null) { //这里是有些拍照后的图片是直接存放到Bundle中的所以我们可以从这里面获取Bitmap图片 Bitmap image = extras.getParcelable("data"); if (image != null) { imageView.setImageBitmap(image); imageView.setLayoutParams(params); } } } } } // 对分辨率较大的图片进行缩放 public Bitmap zoomBitmap(Bitmap bitmap, float width, float height) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); Matrix matrix = new Matrix(); float scaleWidth = ((float) width / w); float scaleHeight = ((float) height / h); matrix.postScale(scaleWidth, scaleHeight);// 利用矩阵进行缩放不会造成内存溢出 Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); return newbmp; } }
相关文章推荐
- Android实现批量照片上传至服务器,拍照或者从相册选择
- [置顶] Android实现仿微信朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)附源码
- Android实现批量照片上传至服务器,拍照或者从相册选择
- Android实现仿微信朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)
- Android 相册选择照片或拍照获取图片系统6.0及7.0实现
- Android实现拍照或从相册中选择照片并截取
- Android实现批量照片上传至server,拍照或者从相冊选择
- android 打开本地相册,并将选择的照片显示到当前界面
- Android调用手机拍照以及从相册选择照片
- 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库
- Android初级开发(八)——手机多媒体—底部弹窗+选择照片或拍照的实现
- Android实现拍照,以及从相册选择图片裁剪功能同时保存在本地
- android拍照与相册选择照片并保存本地
- Android调用手机拍照以及从相册选择照片
- android拍照选择图库后将照片剪裁压缩显示到imageview上
- Android 实现IOS选择拍照相册底部弹出的实例
- Android-->拍照/相册选择照片(从Uri中获取图片路径)
- android调用系统相机拍照与打开相册选择照片进行截取保存笔记
- Android调用手机拍照以及从相册选择照片
- 如何兼容所有Android版本选择照片或拍照然后裁剪图片--基于FileProvider和动态权限的实现