大家好,又见面了,我是全栈君。
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);
}
}
执行结果:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115436.html原文链接:https://javaforall.cn