package cn.sun.picture;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.AssetFileDescriptor;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.ToneGenerator;
import android.os.Bundle;
import android.os.Environment;
import android.os.Vibrator;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.Toast;
/**
* 照相机
*/
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private SurfaceView surfaceView;
private Camera camera;
private ImageButton startCaemraBtn;
private ImageButton flashModeBtn;
// Popwindow显示
private PopupWindow tipPopupWindow;
private RelativeLayout layout;
private ListView listView;
private String title[] = { "自动", "开启", "关闭" };
private AudioManager mAudioManager;
private int ringMode;
public static Bitmap prviewImageBitMap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window = getWindow();
requestWindowFeature(Window.FEATURE_NO_TITLE);
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.main);
initView();
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
setRingMode(mAudioManager.getRingerMode());
Toast.makeText(MainActivity.this, "进入无声拍照模式!", Toast.LENGTH_SHORT)
.show();
}
// 初始化界面的UI
private void initView() {
startCaemraBtn = (ImageButton) findViewById(R.id.startCameraBtn);
flashModeBtn = (ImageButton) findViewById(R.id.flashModeBtn);
startCaemraBtn.setOnClickListener(new startCameraOnClick());
flashModeBtn.setOnClickListener(new flashModeCameraOnClick());
SharedPreferences sharedPreferences = getSharedPreferences(
"issetValueXml", Context.MODE_PRIVATE);
int i = sharedPreferences.getInt("onoff", 0);
if (i == 0) {
flashModeBtn.setBackgroundResource(R.drawable.flashmode_auto);
} else if (i == 1) {
flashModeBtn.setBackgroundResource(R.drawable.flashmode_open);
} else if (i == 2) {
flashModeBtn.setBackgroundResource(R.drawable.flashmode_off);
}
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceView.getHolder().setFixedSize(surfaceView.getWidth(),
surfaceView.getHeight());
// 设置SurfaceHolder对象的类型
surfaceView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 指定用于捕捉拍照事件的SurfaceHolder.Callback对象
surfaceView.getHolder().addCallback(new SurfaceCallback());
}
// 回调接口
private final class SurfaceCallback implements SurfaceHolder.Callback {
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
camera = Camera.open();
camera.setDisplayOrientation(90);
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Camera.Parameters parameters = camera.getParameters();
// 根据屏幕方向设置预览尺寸
parameters.setPreviewSize(display.getWidth(), display.getHeight());
// 下面的参数有可能导致某些手机花屏(后续解决)
parameters.setPreviewFrameRate(3);
// 设置照片格式
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.set("jpeg-quality", 85);
// 设置拍摄照片的实际分辨率,本例中的分辨率是1024×768
parameters.setPictureSize(display.getWidth() / 2,
display.getHeight() / 2);
/*
* if
* (MainActivity.this.getResources().getConfiguration().orientation
* != Configuration.ORIENTATION_LANDSCAPE) { // 如果是竖屏
* parameters.set("orientation", "portrait");
* camera.setDisplayOrientation(90); } else {
* parameters.set("orientation", "landscape");
* camera.setDisplayOrientation(0); }
*/
// 设置保存的图像大小
camera.setParameters(parameters);
try {
// 设置用于显示拍照影像的SurfaceHolder对象
camera.setPreviewDisplay(surfaceView.getHolder());
camera.startPreview();
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
// 回调接口
private final class TakePictureCallback implements PictureCallback {
// 该方法用于处理拍摄后的照片数据
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.v("--------", "执行");
mAudioManager.setRingerMode(getRingMode());
// data参数值就是照片数据,将这些数据以key-value形式保存,以便其他调用该Activity的程序可以获得照片数据
try {
Matrix matrix = new Matrix();
matrix.reset();
matrix.setRotate(90);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
setPrviewImageBitMap(bitmap);//为预览提供一个BitMap(转换)
Intent intent = new Intent(MainActivity.this,
PreviewImageView.class);
startActivity(intent);
// 停止照片拍摄
camera.stopPreview();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
// 无声处理
ShutterCallback sc = new ShutterCallback() {
@Override
public void onShutter() {
Vibrator vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
vibrator.vibrate(100);
}
};
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
// 结束拍照
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
// success为true表示对焦成功
if (success) {
SharedPreferences sharedPreferences = getSharedPreferences(
"issetValueXml", Context.MODE_PRIVATE);
int i = sharedPreferences.getInt("onoff", 2);
if (i == 0) {
Camera.Parameters parameters = camera
.getParameters();
parameters
.setFlashMode(Camera.Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
} else if (i == 1) {
Camera.Parameters parameters = camera
.getParameters();
parameters
.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
camera.setParameters(parameters);
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Android应用源码之基于Android2.2照相机Demo,可以直接放到项目里使用-IT计算机-毕业设计.zip (65个子文件)
Android应用源码之基于Android2.2照相机Demo,可以直接放到项目里使用
CaemraDemos
raw
ss.mp3 12KB
bin
classes.dex 14KB
res
crunch
drawable-ldpi
icon.png 2KB
drawable-hdpi
camera_prass.png 13KB
submit_image.png 1KB
flashmode_auto.png 3KB
camera_switch_pressed.png 1KB
camera_start.png 12KB
icon.png 4KB
flashmode_off.png 2KB
submit_image_press.png 1KB
camera_switch_normal.png 3KB
flashmode_open.png 3KB
drawable-mdpi
icon.png 2KB
CaemraDemos.apk 79KB
dexedLibs
annotations-9b8748c2df4ef1fdc806cadcfb06edb0.jar 943B
classes
cn
sun
picture
PreviewImageView$subMitCameraOnClick.class 758B
MainActivity.class 7KB
BuildConfig.class 337B
MainActivity$3.class 2KB
MainActivity$2.class 2KB
MainActivity$1.class 868B
PreviewImageView.class 1KB
R$layout.class 491B
R$id.class 619B
R$drawable.class 847B
MainActivity$flashModeCameraOnClick.class 779B
MainActivity$SurfaceCallback.class 3KB
R$attr.class 328B
R.class 503B
MainActivity$TakePictureCallback.class 2KB
R$string.class 415B
MainActivity$startCameraOnClick.class 2KB
resources.ap_ 69KB
AndroidManifest.xml 2KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
camera_prass.png 13KB
submit_image.png 1KB
flashmode_auto.png 3KB
camera_switch_pressed.png 1KB
camera_start.png 12KB
icon.png 4KB
flashmode_off.png 2KB
submit_image_press.png 1KB
camera_switch_normal.png 3KB
flashmode_open.png 3KB
drawable
ss.mp3 12KB
image_btn_press.xml 312B
image_subbtn_press.xml 318B
values
strings.xml 169B
drawable-mdpi
icon.png 3KB
layout
preview_image.xml 922B
bubble_dialog.xml 733B
main.xml 1KB
bubble_text.xml 502B
gen
cn
sun
picture
BuildConfig.java 156B
R.java 2KB
.settings
org.eclipse.core.resources.prefs 57B
org.eclipse.jdt.core.prefs 177B
src
cn
sun
picture
PreviewImageView.java 1KB
MainActivity.java 11KB
.project 847B
.classpath 380B
project.properties 562B
AndroidManifest.xml 2KB
共 65 条
- 1
资源评论
芝麻粒儿
- 粉丝: 5w+
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 信呼OA系统2.1.7版源码
- 3122080306 邹子轩 实验报告二.docx
- 基于STM32 NUCLEO板设计彩色LED照明灯(纯cubeMX开发)(大赛作品,文档完整,可直接运行)
- 发那科工业机器人保养大全
- Sphere.h
- REMD固有时间尺度分解信号分量可视化(Matlab完整源码和数据)
- 嵌入式系统双单片机STC89C52+STC15W104多功能学习板电路图可扩展 适用于单片机初学者和教学
- 基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)大赛作品
- XILINXFPGA源码基于Spartan3火龙刀系列FPGA开发板VGA测试例程
- Java聊天室的设计与实现【尚学堂·百战程序员】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功