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[通俗易懂]

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • IntelliJ IDEA中创建java项目

    IntelliJ IDEA中创建java项目IntelliJIDEA支持java、Android、Maven、Gradle、Kotlin等类型的项目,同时AndroidStudio就是在其基础上二次开发出来的,功能非常强大。本文以IntelliJIDEA2018.2.5版本为例介绍如何创建java项目。1.依次选择菜单:File->New->Project…,打开NewProject界面。2.在左侧的项目类型里选择:Java,点击Next按钮。3.在出现的界面中选中“Createprojectfromtempl

  • pytest-allure_python unittest

    pytest-allure_python unittest前言allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。mac环境:

  • 滑雪教学视频高级双板_双板滑雪中级技巧

    滑雪教学视频高级双板_双板滑雪中级技巧转载于:http://www.cnblogs.com/1-2-3/archive/2012/03/08/ski-vidio.html1. 央视教学片http://www.youku.com/playlist_show/id_1526075_ascending_1_mode_pic_page_1.html  共21集,讲解非常详尽,但是从另一方面讲,它太长了,掺杂了各种花里胡哨的东西

  • 搭建自己的git服务器_自建服务器

    搭建自己的git服务器_自建服务器在服务器端:新建一个空git仓库sudogitinit–baresample.gitsudochown-Rgit:gitsample.git在本地:添加remotegitremoteaddmyservergit@server_ip:/path-to-git-repo把本地内容push上去gitadd.gitcommit-m”xxx”…

  • characterEncodingFilter作用[通俗易懂]

    characterEncodingFilter作用[通俗易懂]characterEncoding表示编码方式,enabled表示是否启用编码,分别从初始化参数中取值。web.xml中的配置如下:如果使用的字符编码Filter、request中取出的字符可能是

  • 使能DHCP Relay_option键的作用

    使能DHCP Relay_option键的作用DHCP一家子(不包括DHCPv6)包括DHCPClient、DHCPServer、DHCPRelay以及DHCPSnooping,之后我会一个个详细学习之后发出来。今天讲述一下DHCPrelay,之前先学习的DHCPSever,还没来得及整理,之后会发出来,今天先说说DHCPRelay。DHCPRelay(DHCP中继),也叫作DHCPAgent,主要用于DHCPClient和DHCPServer不在一个网段时,DHCPClient又有自动地址分配的请…

    2022年10月15日

发表回复

您的电子邮箱地址不会被公开。

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