多媒体应用练习---照相机开发
来源:互联网 发布:linux file命令 编辑:程序博客网 时间:2024/05/21 12:41
输入代码:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <SurfaceView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/surfaceView"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" android:id="@+id/buttonlayout"> <!--设置当前显示控件不显示--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" android:layout_marginRight="5dp" android:text="拍照" android:onClick="takepicture" android:id="@+id/takepicture" /> <!--对齐父元素的右边--> <!--对齐父元素的下边--> <!--距离右边5dp--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="20dp" android:layout_toLeftOf="@+id/takepicture" android:layout_alignTop="@+id/takepicture" android:text="对焦" android:onClick="takepicture" android:id="@+id/autofouse" /> <!--顶部对齐--> <!--指定按钮的左边--> <!--距离右边按钮20dp--> </RelativeLayout></FrameLayout>
需要通过修改AndroidManifest.xml来修改Camera权限
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.haige.takepicture"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape"> <!--横向屏幕显示--> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!--添加的权限修改代码--> <uses-permission android:name="android.permission.CAMERA"/> <!--在SDcard中创建与删除文件权限--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!--往SDcard中写入数据权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></manifest>
MainActivity.java
package com.example.haige.takepicture;import android.app.Activity;import android.hardware.Camera;import android.os.Bundle;import android.os.Environment;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import java.io.File;import java.io.FileOutputStream;public class MainActivity extends Activity { private View layout; private Camera camera; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);//窗口无标题 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置窗口全屏显示参数 setContentView(R.layout.activity_main); layout=this.findViewById(R.id.buttonlayout); SurfaceView surfaceView=(SurfaceView)findViewById(R.id.surfaceView); surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//把摄像头画面输送到surfaceView控件上 surfaceView.getHolder().setFixedSize(176, 144);//设置屏幕的分辨率 surfaceView.getHolder().setKeepScreenOn(true);//保持屏幕的常亮 surfaceView.getHolder().addCallback(new SurfaceCallback());//设置屏幕的监听对象 } /* 处理用户触摸事件 */ public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN)//如果是手指触摸的事件 { layout.setVisibility(ViewGroup.VISIBLE);//显示出界面 return true; } return super.onTouchEvent(event); } /* 用户点击按钮的事件 */ public void takepicture(View v) { if(camera!=null) { switch (v.getId()) { case R.id.takepicture: camera.takePicture(null, null, new MyPictureCallback());//回调方法 break; case R.id.autofouse: camera.autoFocus(null); break; } } } private final class MyPictureCallback implements Camera.PictureCallback { public void onPictureTaken(byte[] data, Camera camera)//jpg文件数据 { try { File jpgFile = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg");//建立文件对象 FileOutputStream outStream =new FileOutputStream(jpgFile);//建立文件输出流对象 outStream.write(data);//写入文件数据 outStream.close();//写完数据关闭 camera.startPreview();//预览照相机 } catch (Exception e) { e.printStackTrace(); } } } private final class SurfaceCallback implements SurfaceHolder.Callback { public void surfaceCreated(SurfaceHolder holder) { try { Camera.open();//打开摄像头 Camera.Parameters parameters = camera.getParameters();//得到摄像头的参数对象 parameters.setPreviewSize(800, 480);//设置一张照片的大小 parameters.setPreviewFrameRate(5);//每秒钟从摄像头捕获几个画面 parameters.setPictureSize(1024, 768);//设置拍出照片的大小 parameters.setJpegQuality(80);//设置拍出照片的质量 camera.setParameters(parameters);//将已经设置好的参数赋值给摄像头 camera.setPreviewDisplay(holder);//将camera输送给surfaceView camera.startPreview();//开始预览摄像头 } catch (Exception e) { e.printStackTrace(); } } public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { } public void surfaceDestroyed(SurfaceHolder holder) { if(camera!=null)//避免摄像头同时被多个应用使用 { camera.release(); camera=null; } } }}
0 0
- 多媒体应用练习---照相机开发
- Android多媒体开发:照相机
- HiMPP多媒体应用开发
- Android多媒体之照相机
- Android开发应用之照相机的使用
- 多媒体应用开发1---MediaPlayer
- 第四章:多媒体应用开发
- Android应用开发-----------------接受照相机拍照广播和录像广播
- J2ME MMAPI开发移动多媒体应用
- Android多媒体应用开发-控制摄像头拍照
- Android多媒体应用开发-控制摄像头拍照
- Android开发_多媒体的简单应用
- Android-应用开发-多媒体编程(九)
- Android多媒体应用开发系列(一) 拍照
- 多媒体应用
- 面向照相机的开发
- android 照相机开发
- android开发调用照相机
- 堆排序
- 虚拟机 Kali的网络连不上?
- 封装HTTPRequestSerializer 的知识(一)
- 关于HBase协处理器导致问题的研究
- 使用 AngularJS 的路由和模板实现单页应用 (Single Page)
- 多媒体应用练习---照相机开发
- 通过文件分类实现程序内敛
- 关于一些css属性在微信上不兼容的解决方法
- PLM系统与选择
- Objective-C - runtime 之 Class 和 Meta Class
- Shell编程(2):符号相关
- Markdown 11种基本语法
- HDU 3652 B-Number(数位dp)
- C++实现通过年份与天数判断月份日期