package com.cloay.camera;
|
002 |
003 |
import java.io.FileNotFoundException;
|
004 |
005 |
import android.app.Activity;
|
006 |
import android.app.AlertDialog;
|
007 |
import android.content.ContentResolver;
|
008 |
import android.content.Intent;
|
009 |
import android.graphics.Bitmap;
|
010 |
import android.graphics.BitmapFactory;
|
011 |
import android.net.Uri;
|
012 |
import android.os.Bundle;
|
013 |
import android.view.MotionEvent;
|
014 |
import android.view.View;
|
015 |
import android.view.View.OnClickListener;
|
016 |
import android.view.View.OnTouchListener;
|
017 |
import android.widget.ImageButton;
|
018 |
import android.widget.ImageView;
|
019 |
/** |
020 |
* 打开照相机或者图库添加图片
|
021 |
* CameraTestActivity.java
|
022 |
* @author Cloay
|
023 |
* 2011-11-30
|
024 |
*/
|
025 |
public class CameraTestActivity extends Activity {
|
026 |
private ImageButton camera;
|
027 |
private ImageView image;
|
028 |
@Override
|
029 |
public void onCreate(Bundle savedInstanceState) {
|
030 |
super .onCreate(savedInstanceState);
|
031 |
setContentView(R.layout.main);
|
032 |
|
033 |
image = (ImageView) findViewById(R.id.image);
|
034 |
camera = (ImageButton) findViewById(R.id.camera);
|
035 |
camera.setOnTouchListener( new OnTouchListener() {
|
036 |
|
037 |
@Override
|
038 |
public boolean onTouch(View v, MotionEvent event) {
|
039 |
if (event.getAction() == MotionEvent.ACTION_DOWN){
|
040 |
v.setBackgroundResource(R.drawable.camera_bg_pressed);
|
041 |
}
|
042 |
if (event.getAction() == MotionEvent.ACTION_UP){
|
043 |
showMenuDialog();
|
044 |
v.setBackgroundResource(R.drawable.camera_bg_normal);
|
045 |
}
|
046 |
return false ;
|
047 |
}
|
048 |
});
|
049 |
}
|
050 |
|
051 |
private void showMenuDialog() {
|
052 |
View menuView = View.inflate(CameraTestActivity. this , R.layout.menu, null );
|
053 |
final AlertDialog menuDialog = new AlertDialog.Builder(CameraTestActivity. this )
|
054 |
.setView(menuView)
|
055 |
.setTitle( "选择操作" )
|
056 |
// .setIcon(R.drawable.camera) |
057 |
.create();
|
058 |
menuDialog.show();
|
059 |
menuView.findViewById(R.id.camera).setOnClickListener( new OnClickListener() {
|
060 |
|
061 |
@Override
|
062 |
public void onClick(View v) {
|
063 |
menuDialog.dismiss();
|
064 |
Intent intentCamera = new Intent( "android.media.action.IMAGE_CAPTURE" ); //使用照相机
|
065 |
startActivityForResult(intentCamera, Activity.DEFAULT_KEYS_DIALER);
|
066 |
}
|
067 |
});
|
068 |
menuView.findViewById(R.id.picture).setOnClickListener( new OnClickListener() {
|
069 |
|
070 |
@Override
|
071 |
public void onClick(View v) {
|
072 |
menuDialog.dismiss();
|
073 |
// Intent intentPhoto = new Intent(Intent.ACTION_GET_CONTENT, null); |
074 |
// intentPhoto.setType("image/*"); //这个参数是确定要选择的内容为图片 |
075 |
// intentPhoto.putExtra("crop", "circle"); //这个参数 不太懂,唯一知道的是:设置了参数,就会调用裁剪,如果不设置,就会跳过裁剪的过程。 |
076 |
// intentPhoto.putExtra("aspectX", 33); //这个是裁剪时候的 裁剪框的 X 方向的比例。 |
077 |
// intentPhoto.putExtra("aspectY",43); //同上Y 方向的比例. (注意: aspectX, aspectY ,两个值都需要为 整数,如果有一个为浮点数,就会导致比例失效。) |
078 |
//设置aspectX 与 aspectY 后,裁剪框会按照所指定的比例出现,放大缩小都不会更改。如果不指定,那么 裁剪框就可以随意调整了。
|
079 |
// intentPhoto.putExtra("outputX", 50); //返回数据的时候的 X 像素大小。 |
080 |
// intentPhoto.putExtra("outputY", 100); //返回的时候 Y 的像素大小。 |
081 |
//以上两个值,设置之后会按照两个值生成一个Bitmap, 两个值就是这个bitmap的横向和纵向的像素值,如果裁剪的图像和这个像素值不符合,那么空白部分以黑色填充。
|
082 |
083 |
// intentPhoto.putExtra("noFaceDetection", true); // 是否去除面部检测, 如果你需要特定的比例去裁剪图片,那么这个一定要去掉,因为它会破坏掉特定的比例。 |
084 |
// |
085 |
// intentPhoto.putExtra("return-data", true); //是否要返回值。 一般都要。 |
086 |
// startActivityForResult(intentPhoto, 1); |
087 |
|
088 |
Intent intent = new Intent();
|
089 |
/* 开启Pictures画面Type设定为image */
|
090 |
intent.setType( "image/*" );
|
091 |
/* 使用Intent.ACTION_GET_CONTENT这个Action */
|
092 |
intent.setAction(Intent.ACTION_GET_CONTENT);
|
093 |
/* 取得相片后返回本画面 */
|
094 |
startActivityForResult(intent, 2 );
|
095 |
}
|
096 |
});
|
097 |
}
|
098 |
099 |
@Override
|
100 |
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
|
101 |
if (requestCode == 2 ){
|
102 |
if (resultCode == RESULT_OK) {
|
103 |
Uri uri = data.getData();
|
104 |
ContentResolver cr = this .getContentResolver();
|
105 |
try {
|
106 |
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
|
107 |
/* 将Bitmap设定到ImageView */
|
108 |
image.setImageBitmap(bitmap);
|
109 |
} catch (FileNotFoundException e) {
|
110 |
image.setImageResource(R.drawable.empty);
|
111 |
}
|
112 |
}
|
113 |
}
|
114 |
if (requestCode == Activity.DEFAULT_KEYS_DIALER){
|
115 |
if (data != null ){
|
116 |
Bundle extras = data.getExtras();
|
117 |
Bitmap bitmap = (Bitmap) extras.get( "data" );
|
118 |
image.setImageBitmap(bitmap);
|
119 |
}
|
120 |
else {
|
121 |
image.setImageResource(R.drawable.empty);
|
122 |
}
|
123 |
}
|
124 |
super .onActivityResult(requestCode, resultCode, data);
|
125 |
}
|
126 |
|
127 |
|
128 |
} |
相关推荐
在Android 4.0.3(Ice Cream Sandwich)版本中,照相机功能是系统的核心组件之一,对于开发者来说,理解其源码可以帮助我们深入学习Android系统以及如何构建高性能、功能丰富的相机应用。以下是对Android 4.0.3照相机...
本资源"android照相机应用源码"提供了一个可以直接运行的Android相机应用示例,这对于初学者和有经验的开发者来说都是一个宝贵的参考资料。 首先,我们需要了解Android相机API的基础知识。在Android 3.0(API级别11...
裁剪可以通过修改预览数据或者在绘制时使用`Canvas`的`clipRect`方法实现。 对于旋转问题,Android设备有多种屏幕方向,而相机传感器可能也有不同的方向,因此我们需要在`setDisplayOrientation`方法中处理旋转。...
在本篇文章中,我们将探讨如何在 Delphi XE5 中使用 Android 平台的照相机组件,获取拍摄的照片。 使用 Delphi XE5 调用 Android 照相机的步骤 ----------------------------------- 要使用 Delphi XE5 调用 ...
android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo android 照相机 demo
在使用Delphi XE6开发Android应用程序时,调用照相机功能是常见的需求,这使得用户可以直接通过应用拍摄照片。本教程将详细讲解如何在Delphi XE6中实现这一功能,无需额外的组件,只需利用系统自带的功能,确保代码...
这个压缩包"Android应用源码之基于Android2.2照相机Demo,可以直接放到项目里使用.zip"提供了一个适用于Android 2.2版本的照相机应用示例,非常适合开发者进行学习和参考。下面将详细解析这个Demo中涉及的主要知识点...
在Android开发中,图片的获取和照相机的使用是两个重要的功能模块,广泛应用于各种应用程序,如社交网络、相册应用等。以下是对这两个知识点的详细讲解。 首先,我们来看如何在Android中获取本地图片: 1. **...
【标题】"基于Android2.2照相机Demo,可以直接放到项目里使用.zip"是一个提供给开发者参考的Android应用示例,特别关注于Android系统中照相机功能的实现。这个Demo适用于那些想要在自己的应用程序中集成照相机功能的...
在Android应用中,使用照相机功能需要在`AndroidManifest.xml`中添加相应的权限。这个Demo可能包含了`<uses-feature>`标签声明使用照相机硬件,以及`<uses-permission>`标签请求`CAMERA`权限。例如: ```xml ...
- 使用Intent:在Android中,我们可以通过Intent来启动系统照相机应用,让用户进行拍照。通过创建一个Intent,设置其类型为`ACTION_IMAGE_CAPTURE`,然后使用`startActivityForResult()`方法启动。当用户完成拍照后...
在Android平台上,开发自定义照相机应用是一项常见的任务,它允许开发者根据特定需求定制相机功能和用户界面。...通过理解并实践这些步骤,开发者可以构建出功能丰富的自定义Android照相机应用,满足各种定制化需求。
在本文中,我们将探讨如何在Android应用程序中实现录像和录音功能,以及与之相关的技术点。 首先,Android系统提供了一个名为`MediaRecorder`的类,它是实现录像和录音的核心组件。`MediaRecorder`可以设置多种参数...
在移动应用开发领域,尤其是Android平台,实现自定义功能是提升用户体验的关键之一。本文档将详细讲解如何通过自定义方式在Android应用程序中集成照相机功能,包括拍摄照片、保存到SD卡以及利用`Bundle`在不同活动...
至此,一个简单的使用Delphi XE5调用Android照相机功能的应用程序已经完成。当你运行此程序并点击"拍照"按钮,设备的相机应用会被启动,拍摄的照片会自动保存到外部存储,并显示在界面上。 需要注意的是,Android...
标题中的“android wifi照相机”指的是一个基于Android平台开发的照相机应用,它具有通过WiFi进行实时传输照片的功能。这个项目对于理解Android系统的相机API、网络编程以及如何整合这两者来实现无线数据传输非常有...
Android应用源码之基于Android2.2照相机Demo,可以直接放到项目里使用.zip项目安卓应用源码下载Android应用源码之基于Android2.2照相机Demo,可以直接放到项目里使用.zip项目安卓应用源码下载 1.适合学生毕业设计研究...
android调用照相机,非常好用,可以实现调用手机自带德相机进行操作
3. 应用程序接口(Application Interface):开发者可以使用Android SDK提供的Camera类和相关API来访问和控制相机。 二、Camera服务 相机服务是Android系统中一个重要的服务,它通过Binder机制为上层应用提供服务...
在Android平台上,调用照相机拍照是常见的功能之一,它涉及到多媒体处理、用户交互以及硬件接口的使用。本文将深入探讨如何在Android应用中实现这一功能,并特别关注对焦优化。 首先,调用照相机拍照的基本流程是...