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);
没有合适的资源?快使用搜索试试~ 我知道了~
拍照&录像 基于Android2.2照相机Demo,可以直接放到项目里使用(程序源码).rar
共65个文件
png:24个
class:17个
xml:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 100 浏览量
2023-03-17
08:32:58
上传
评论
收藏 280KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
拍照&录像 基于Android2.2照相机Demo,可以直接放到项目里使用(程序源码).rar (65个子文件)
CaemraDemos
project.properties 562B
.classpath 380B
.settings
org.eclipse.jdt.core.prefs 177B
org.eclipse.core.resources.prefs 57B
assets
src
cn
sun
picture
PreviewImageView.java 1KB
MainActivity.java 11KB
res
drawable-mdpi
icon.png 3KB
drawable-xhdpi
drawable-ldpi
icon.png 2KB
values
strings.xml 169B
layout
bubble_dialog.xml 733B
preview_image.xml 922B
main.xml 1KB
bubble_text.xml 502B
drawable
image_btn_press.xml 312B
ss.mp3 12KB
image_subbtn_press.xml 318B
drawable-hdpi
camera_start.png 12KB
camera_prass.png 13KB
submit_image_press.png 1KB
flashmode_auto.png 3KB
camera_switch_normal.png 3KB
flashmode_open.png 3KB
flashmode_off.png 2KB
camera_switch_pressed.png 1KB
submit_image.png 1KB
icon.png 4KB
bin
classes
cn
sun
picture
MainActivity$1.class 868B
MainActivity$TakePictureCallback.class 2KB
R$string.class 415B
R$layout.class 491B
PreviewImageView$subMitCameraOnClick.class 758B
MainActivity$startCameraOnClick.class 2KB
PreviewImageView.class 1KB
R$id.class 619B
BuildConfig.class 337B
R$attr.class 328B
MainActivity$flashModeCameraOnClick.class 779B
MainActivity$3.class 2KB
R$drawable.class 847B
MainActivity.class 7KB
MainActivity$2.class 2KB
R.class 503B
MainActivity$SurfaceCallback.class 3KB
CaemraDemos.apk 79KB
resources.ap_ 69KB
res
crunch
drawable-mdpi
icon.png 2KB
drawable-ldpi
icon.png 2KB
drawable-hdpi
camera_start.png 12KB
camera_prass.png 13KB
submit_image_press.png 1KB
flashmode_auto.png 3KB
camera_switch_normal.png 3KB
flashmode_open.png 3KB
flashmode_off.png 2KB
camera_switch_pressed.png 1KB
submit_image.png 1KB
icon.png 4KB
classes.dex 14KB
dexedLibs
annotations-9b8748c2df4ef1fdc806cadcfb06edb0.jar 943B
AndroidManifest.xml 2KB
.project 847B
AndroidManifest.xml 2KB
gen
cn
sun
picture
BuildConfig.java 156B
R.java 2KB
raw
ss.mp3 12KB
共 65 条
- 1
资源评论
金枝玉叶9
- 粉丝: 194
- 资源: 7637
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- vscode-pylance-2023.5.21-vsixhub.com.vsix
- 【java毕业设计】在线考试源码(springboot+vue+mysql+说明文档+LW).zip
- content_1730964580935.zip
- 【java毕业设计】在线考试系统源码(springboot+vue+mysql+说明文档+LW).zip
- 57256基于微信小程序的智能健康管理平台的设计与实现(数据库+源码)
- 【java毕业设计】在线动漫信息平台源码(springboot+vue+mysql+说明文档+LW).zip
- 【java毕业设计】在线答疑系统文件源码(springboot+vue+mysql+说明文档+LW).zip
- VESTA 软件,计算材料学、DFT计算必备!
- 【java毕业设计】在线BLOG网源码(springboot+vue+mysql+说明文档+LW).zip
- ToWCL,一个模型的独白
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功