调取系统相册和照相机选取图片

2023-11-29 09:58

本文主要是介绍调取系统相册和照相机选取图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在让用户自定义头像或皮肤的时候  可能会采取照相或选取相册等方法来实现用户自定义,这里我们就简单实现一下~ 

在这里先贴出布局-----仅供参考

activity_main://一张图片而已  很简单

<ImageView   android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:id="@+id/img_true"  />  

activity_select_photo://选择图片   其中有一些图片资源和动画,在文末分享给大家


<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:gravity="center_horizontal" >  <LinearLayout  android:id="@+id/dialog_layout"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_alignParentBottom="true"  android:layout_marginLeft="10dip"  android:layout_marginRight="10dip"  android:layout_marginBottom="10dp"  android:gravity="center_horizontal"  android:orientation="vertical" >  <LinearLayout  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:background="@drawable/select_photo_up_bg"  android:orientation="vertical"  android:paddingBottom="5dp"  android:paddingTop="5dp" >  <Button  android:id="@+id/btn_take_photo"  android:layout_width="fill_parent"  android:layout_height="35dp"  android:background="@drawable/select_photo_bg"  android:text="@string/paizhaoxuanqu"  android:textStyle="bold" />  <View  android:layout_width="fill_parent"  android:layout_height="0.5px"  android:background="#828282" />  <Button  android:id="@+id/btn_pick_photo"  android:layout_width="fill_parent"  android:layout_height="35dp"  android:layout_marginTop="0dip"  android:background="@drawable/select_photo_bg"  android:text="@string/xiangcexuanqu"  android:textStyle="bold" />  </LinearLayout>  <Button  android:id="@+id/btn_cancel"  android:layout_width="fill_parent"  android:layout_height="35dp"  android:layout_marginTop="20dip"  android:background="@drawable/select_photo_bg"  android:paddingBottom="5dp"  android:paddingTop="5dp"  android:text="@string/exit"  android:textColor="#ffff0000"  android:textStyle="bold" />  </LinearLayout>  </RelativeLayout>  

-----------MainActivity-----------

图片监听事件   点击跳转选择页面使用回调


<span style="white-space:pre">    </span>private ImageView imgtrue;  /** 选择文件 */  public static final int TO_SELECT_PHOTO = 1;  <span style="white-space:pre">        </span>//图片选择事件  imgtrue.setOnClickListener(new OnClickListener() {  Intent intent;  @Override  public void onClick(View v) {  // TODO Auto-generated method stub  intent = new Intent(this, SelectPhotoActivity.class);  startActivityForResult(intent, TO_SELECT_PHOTO);  intent = null;  }  });  


回调方法 接收图片地址  设置给控件

@SuppressWarnings("deprecation")  
@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO) {  picPath = data.getStringExtra(SelectPhotoActivity.KEY_PHOTO_PATH);  Bitmap bm = BitmapFactory.decodeFile(picPath);  zoomBitmap = zoomBitmap(bm, 300, 300);  imgtrue.setBackgroundDrawable(new BitmapDrawable(bm));  }  super.onActivityResult(requestCode, resultCode, data);  
}  

将获取的图片按宽高进行缩放

/** * 将原图按照指定的宽高进行缩放 *  * @param oldBitmap * @param newWidth * @param newHeight * @return */  
private Bitmap zoomBitmap(Bitmap oldBitmap, int newWidth, int newHeight) {  int width = oldBitmap.getWidth();  int height = oldBitmap.getHeight();  float scaleWidth = ((float) newWidth) / width;  float scaleHeight = ((float) newHeight) / height;  Matrix matrix = new Matrix();  matrix.postScale(scaleWidth, scaleHeight);  Bitmap newBitmap = Bitmap.createBitmap(width, height, Config.RGB_565);  Canvas canvas = new Canvas(newBitmap);  canvas.drawBitmap(newBitmap, matrix, null);  return newBitmap;  
}  

------------------SelectPhotoActivity------------------

//图片选择

import android.app.Activity;  
import android.content.ContentValues;  
import android.content.Intent;  
import android.database.Cursor;  
import android.net.Uri;  
import android.os.Bundle;  
import android.os.Environment;  
import android.provider.MediaStore;  
import android.view.MotionEvent;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.Toast;  public class SelectPhotoActivity extends Activity implements OnClickListener {  /** 使用照相机拍照获取图片 */  public static final int SELECT_PIC_BY_TACK_PHOTO = 1;  /** 使用相册中的图片 */  public static final int SELECT_PIC_BY_PICK_PHOTO = 2;  /** 开启相机 */  private Button btn_take_photo;  /** 开启图册 */  private Button btn_pick_photo;  /** 取消 */  private Button btn_cancel;  /** 获取到的图片路径 */  private String picPath;  private Intent lastIntent;  private Uri photoUri;  /** 从Intent获取图片路径的KEY */  public static final String KEY_PHOTO_PATH = "photo_path";  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_select_photo);  btn_take_photo = (Button) findViewById(R.id.btn_take_photo);  btn_pick_photo = (Button) findViewById(R.id.btn_pick_photo);  btn_cancel = (Button) findViewById(R.id.btn_cancel);  lastIntent = getIntent();  btn_take_photo.setOnClickListener(this);  btn_pick_photo.setOnClickListener(this);  btn_cancel.setOnClickListener(this);  }  @Override  public void onClick(View v) {  switch (v.getId()) {  case R.id.btn_take_photo : // 开启相机  takePhoto();  break;  case R.id.btn_pick_photo : // 开启图册  pickPhoto();  break;  case R.id.btn_cancel : // 取消操作  this.finish();  break;  default :  break;  }  }  private void takePhoto() {  //  执行拍照前,应该先判断SD卡是否存在  String SDState = Environment.getExternalStorageState();  if (SDState.equals(Environment.MEDIA_MOUNTED)) {  Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"  /*** * 需要说明一下,以下操作使用照相机拍照,拍照后的图片会存放在相册中的 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图 * 如果不实用ContentValues存放照片路径的话,拍照后获取的图片为缩略图不清晰 */  ContentValues values = new ContentValues();  photoUri = this.getContentResolver().insert(  MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);  startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);  } else {  Toast.makeText(getApplicationContext(), "内存卡不存在",  Toast.LENGTH_SHORT).show();  }  }  /*** *  从相册中取图片 */  private void pickPhoto() {  Intent intent = new Intent();  intent.setType("image/*");  intent.setAction(Intent.ACTION_GET_CONTENT);  startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);  }  @Override  public boolean onTouchEvent(MotionEvent event) {  finish();  return super.onTouchEvent(event);  }  @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {  if (resultCode == Activity.RESULT_OK) {  doPhoto(requestCode, data);  }  super.onActivityResult(requestCode, resultCode, data);  }  /**  * 选择图片后,获取图片的路径  */  private void doPhoto(int requestCode, Intent data) {  if (requestCode == SELECT_PIC_BY_PICK_PHOTO) {// 从相册取图片,有些手机有异常情况,请注意  if (data == null) {  Toast.makeText(getApplicationContext(), "选择图片文件出错",  Toast.LENGTH_SHORT).show();  return;  }  photoUri = data.getData();  if (photoUri == null) {  Toast.makeText(getApplicationContext(), "选择图片文件出错",  Toast.LENGTH_SHORT).show();  return;  }  }  String[] pojo = {MediaStore.Images.Media.DATA};  @SuppressWarnings("deprecation")  Cursor cursor = managedQuery(photoUri, pojo, null, null, null);  if (cursor != null) {  int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);  cursor.moveToFirst();  picPath = cursor.getString(columnIndex);  cursor.close();  }  if (picPath != null  && (picPath.endsWith(".png") || picPath.endsWith(".PNG")  || picPath.endsWith(".jpg") || picPath.endsWith(".JPG"))) {  lastIntent.putExtra(KEY_PHOTO_PATH, picPath);  setResult(Activity.RESULT_OK, lastIntent);  finish();  } else {  Toast.makeText(getApplicationContext(), "选择图片文件不正确",  Toast.LENGTH_SHORT).show();  }  }  }  

资源分享:

动画anim
push_bottom_in.xml
<?xml version="1.0" encoding="utf-8"?>  
<!-- 上下滑入式 -->  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  <translate  android:duration="200"  android:fromYDelta="100%p"  android:toYDelta="0" />  </set>  


push_bottom_out.xml:
<?xml version="1.0" encoding="utf-8"?>  
<!-- 上下滑出式 -->  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  <translate  android:duration="200"  android:fromYDelta="0"  android:toYDelta="50%p" />  
</set>  

图片资源:







这篇关于调取系统相册和照相机选取图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/432386

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默