Android开发:控制镜头变焦
来源:互联网 发布:轮滑的好处和坏处 知乎 编辑:程序博客网 时间:2024/06/08 13:49
特别针对三星盖世相机:EK-GC100 EK-GC110
MainActivity.java
package com.example.mytestcamera;import java.io.IOException;import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.Parameters;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Button;public class MainActivity extends Activity implements SurfaceHolder.Callback{ @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stub if (isPreview) { switch (keyCode) { case KeyEvent.KEYCODE_ZOOM_IN: Log.i("ZOOM", "放大"); setZoom1(); break; case KeyEvent.KEYCODE_ZOOM_OUT: Log.i("ZOOM", "缩小"); setZoom2(); break; default: break; }} return super.onKeyDown(keyCode, event);}public Camera myCamera; SurfaceView mySurfaceView; SurfaceHolder mySurfaceHolder; Button myButton1; Button myButton2; boolean isPreview = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_main); mySurfaceView = (SurfaceView)findViewById(R.id.mySurfaceView); myButton1 = (Button)findViewById(R.id.myButton); myButton2 = (Button)findViewById(R.id.myButton2); mySurfaceHolder = mySurfaceView.getHolder(); mySurfaceHolder.addCallback(this); mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); myButton1.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {initCamera();} }); myButton2.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {if(myCamera!=null&&isPreview){myCamera.stopPreview();myCamera.release();myCamera = null;isPreview = false;}} }); }public void initCamera() {// TODO Auto-generated method stubLog.i("ZOOM", "initCamera");if(!isPreview){myCamera = Camera.open();}if(myCamera !=null && !isPreview){try{myCamera.setPreviewDisplay(mySurfaceHolder);myCamera.startPreview();}catch(IOException e){e.printStackTrace();}isPreview = true;}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stub}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}public boolean isSupportZoom() { boolean isSuppport = false; if (myCamera.getParameters().isZoomSupported())//myCamera.getParameters().isSmoothZoomSupported()) { isSuppport = true; } return isSuppport; }public void setZoom1() { if (isSupportZoom()) { try { Parameters params = myCamera.getParameters(); final int MAX = params.getMaxZoom(); int zoomValue = params.getZoom(); Log.i("ZOOM", "-----------------MAX:"+MAX+" params : "+zoomValue); if (zoomValue <= 14) { zoomValue += 1; params.setZoom(zoomValue); myCamera.setParameters(params);} Log.i("ZOOM", "Is support Zoom " + params.isZoomSupported()); } catch (Exception e) { Log.i("ZOOM", "--------exception zoom"); e.printStackTrace(); } } else { Log.i("ZOOM", "--------the phone not support zoom"); } }public void setZoom2() { if (isSupportZoom()) { try { Parameters params = myCamera.getParameters(); final int MAX = params.getMaxZoom(); int zoomValue = params.getZoom(); Log.i("ZOOM", "-----------------MAX:"+MAX+" params : "+zoomValue); if (zoomValue >= 1) { zoomValue -= 1; params.setZoom(zoomValue); myCamera.setParameters(params);} Log.i("ZOOM", "Is support Zoom " + params.isZoomSupported()); } catch (Exception e) { Log.i("ZOOM", "--------exception zoom"); e.printStackTrace(); } } else { Log.i("ZOOM", "--------the phone not support zoom"); } }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/mySurfaceView" android:layout_width="match_parent" android:layout_height="418dp" > </SurfaceView> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" ><Buttonandroid:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开"/><Button android:id="@+id/myButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关闭" /> </LinearLayout></LinearLayout>
注意加上权限:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
工程文件下载:http://download.csdn.net/detail/charein/6321071
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubswitch (keyCode) {case KeyEvent.KEYCODE_ZOOM_IN:Log.i("ZOOM", "放大");setZoom(1);break;case KeyEvent.KEYCODE_ZOOM_OUT:Log.i("ZOOM", "缩小");setZoom(2);break;default:break;}return super.onKeyDown(keyCode, event);}public void setZoom(int zoomKey){//判断是否支持变焦if (mCamera.getParameters().isZoomSupported()) {try {Parameters parameters = mCamera.getParameters();int zoomValue = parameters.getZoom();switch (zoomKey) {case 1:if (zoomValue <= 14) zoomValue += 1;break;case 2:if (zoomValue >= 1) zoomValue -= 1;break;default:break;}parameters.setZoom(zoomKey);mCamera.setParameters(parameters);} catch (Exception e) {Log.i("ZOOM", "exception zoom");e.printStackTrace();}}else {Log.i("ZOOM", "NOT support zoom");}}
- Android开发:控制镜头变焦
- android拍照开发 关于拖拉条控制变焦
- iOS 镜头变焦,推近或者拉远焦距--ZOOM
- unityios开发--触摸屏手势控制镜头旋转与缩放
- libgdx镜头控制
- unity镜头控制脚本
- unity ios平台镜头控制
- 鼠标(镜头)旋转控制
- android Camera变焦的一个总结
- Unity3D中的第三人称镜头的脚本控制
- Unity3D中的第三人称镜头的脚本控制
- 触摸屏手势控制镜头旋转与缩放
- 触摸屏手势控制镜头旋转与缩放
- 镜头
- 镜头
- 镜头
- 镜头
- Android基于box2d开发弹弓类游戏[六]-------------移动的镜头&添加目标
- 使用dnsmasq作DNS服务器
- POJ 1087 A Plug for UNIX 最大流(建图好题)
- c#验证身份证号
- μC/OS-II学习之:任务,信号量、邮箱、队列及其区别 (转)
- UI控件详解09-UIButton详细解释
- Android开发:控制镜头变焦
- 2013年人人校园招聘笔试题
- 通过PhoneStateListener实现Android电话监听
- paip.c++ 开发 api 手册文档总结
- 软考(3)——看图心想操作系统
- 输入一个整数,输出所有可能的整数序列,使得序列中的整数之和等于输入的整数
- android源码下载及repo最新版
- java日志信息 log4j 使用方法
- MCI使用