Android Camera[通俗易懂]

Android Camera

大家好,又见面了,我是全栈君。

Android调用系统api使用照相机功能,实现拍照获取图片以及从照相机库中获取指定图片的功能。

下面是演示样例代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
	<ImageView android:layout_width="match_parent"
	    android:layout_height="100dip"
	    android:id="@+id/image"
	    />
 	<Button 
 	    android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="testPopupWindow"
        android:layout_below="@id/image"
        />

</RelativeLayout>

/**
 * 实现Popup弹出窗体并实现调用系统照相机功能
 * @author dream
 *
 */
public class TestPopupWindow extends Activity {
	private SelectPopupWindow popupWindow;
	private ImageView image;
	private Button btn;
	private Uri fileUri;     
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main1);
		init();
	}
	
	private void init(){
		image = (ImageView) findViewById(R.id.image);
		btn = (Button) findViewById(R.id.btn);
		btn.setOnClickListener(onClickListener);
		fileUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")); //图片存放路径
	}
	
	View.OnClickListener onClickListener = new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			switch(v.getId()){
			case R.id.btn:
				test();
				break;
			case R.id.takephoto:
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
				startActivityForResult(intent, 100);
				break;
			case R.id.selectfromalbum:
				Intent intent1 = new Intent(Intent.ACTION_PICK);
				intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
				startActivityForResult(intent1, 200);
				break;
				
			}
		}
	};
	
	
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if(requestCode == 100 && resultCode == RESULT_OK){
			int width = image.getWidth();
			int height = image.getHeight();
			BitmapFactory.Options opts = new BitmapFactory.Options();
			opts.inJustDecodeBounds = true;
			BitmapFactory.decodeFile(fileUri.getPath(), opts);
			int w = opts.outWidth;
			int h = opts.outHeight;
			int factor;
			if(w>width && h>height){
				factor = Math.min(w/width, h/height);  //依据ImageView的大小按一定比例缩小图片
			}else {
				factor = 1;
			}
			opts.inSampleSize = factor;
			opts.inJustDecodeBounds = false;
			Bitmap bm = BitmapFactory.decodeFile(fileUri.getPath(), opts);
			image.setImageBitmap(bm);
		} else if(requestCode == 200 && resultCode == RESULT_OK){
			int width = image.getWidth();
			int height = image.getHeight();
			BitmapFactory.Options opts = new BitmapFactory.Options();
			opts.inJustDecodeBounds = true;
			Uri uri = data.getData();
			try {
				InputStream in = getContentResolver().openInputStream(uri);
				BitmapFactory.decodeStream(in, null, opts);
				int w = opts.outWidth;
				int h = opts.outHeight;
				int factor;
				if(w>width && h>height){
					factor = Math.min(w/width, h/height);  //依据ImageView的大小按一定比例缩小图片
				}else {
					factor = 1;
				}
				opts.inSampleSize = factor;
				opts.inJustDecodeBounds = false;
				in = getContentResolver().openInputStream(uri);   //须要再次获取,由于前面流已经改变了
				Bitmap bm = BitmapFactory.decodeStream(in, null, opts);
				image.setImageBitmap(bm);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}

	public void test(){
		popupWindow = new SelectPopupWindow(this, onClickListener);
		popupWindow.showAtLocation(findViewById(R.id.main), 
				Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
	}
	
}

执行结果:

Android Camera[通俗易懂]

Android Camera[通俗易懂]

Android Camera[通俗易懂]

Android Camera[通俗易懂]

Android Camera[通俗易懂]

Android Camera[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115436.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月4日 下午2:00
下一篇 2022年2月4日 下午2:00


相关推荐

  • VisiFire示例

    VisiFire示例Syntax:LabelText=”#AxisXLabel,#YValue” /> BelowisthechartaftersettingLabelTextproperty:   Modifiers: Modifier

    2022年7月21日
    16
  • PRIMARY KEY联合主键

    PRIMARY KEY联合主键MySQL 主键 PRIMARYKEY 单字段主键 多字段联合主键主键的指定和删除

    2026年3月19日
    2
  • 小程序管理后台的基本操作

    小程序管理后台的基本操作文章目录引言 I 公众号和小程序打通 II 基础管理 2 1 版本管理 2 2 代码仓库存储 2 3 配置服务器信息 III 云开发 seealso 引言公众号和小程序打通版本管理成员管理管理员 1 人 是注册账号的微信用户 项目成员 15 人 可以登录小程序管理后台 开发者必须是项目成员 体验成员 15 人 只有体验的权限 没有开发的权限 开发管理 服务器域名配置 Request 地址 就是 api 的 baseURL 本地开发时可以关闭 https 验证 上线时一定要小程序管理后台中添加上

    2026年3月19日
    2
  • 家庭服务器配置(云服务器解决方案)

    家庭服务器解决方案——硬件篇2021-07-1622:41:5829点赞193收藏36评论关于服务器我一直有个设想:未来每个人都有一个专属服务器。这个服务器是每个人在互联网的数据中枢。这个服务器:安全,只有所有者拥有管理权限;强大,可以存储数据并保护隐私。当人离开世界时,可以选择把一些数据留给家人,也可以选择把自己在互联网的记忆全部抹去……当然现在并没有我设想的那种服务器,所以不如聊聊更实际的家…

    2022年4月10日
    237
  • nohup linux命令,Linux nohup命令

    nohup linux命令,Linux nohup命令nohup 命令用于执行另一个程序或者命令并将其参数指定为忽略所有 SIGHUP 中断 信号 SIGHUP 是当前控制终端关闭时发送到进程的信号通常 当您通过 SSH 运行命令时 如果连接断开 或者退出 SSH SSH 会话将终止 并且终端执行的所有命令都将停止 如果你不想被某一程序被终止 可以使用 nohup 命令 它将忽略所有中断信号 命令程序将继续运行 如何使用 nohup 命令该 nohup 命令的语法如下 noh

    2026年3月16日
    2
  • sqlite database browser 下载_数据库如何编辑所有行

    sqlite database browser 下载_数据库如何编辑所有行2019独角兽企业重金招聘Python工程师标准>>>…

    2025年10月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号