Android开发:控制镜头变焦

news/2025/2/7 6:18:30/

特别针对三星盖世相机: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 stubif (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;@Overridepublic 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"><SurfaceViewandroid: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="打开"/><Buttonandroid: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");}}



http://www.ppmy.cn/news/826772.html

相关文章

js防抖功能实现

大家好&#xff0c;今天来点有一点点难度的防抖原理实现&#xff0c;今天呢我们要实现的是一个豪华版的防抖&#xff0c;我想想奥&#xff0c;作为一个豪华版的防抖肯定不能只有防抖的功能&#xff0c;假如现在我们有一个输入框搜索的案例&#xff0c;我们使用防抖来进行约束&a…

【Camera】相机防抖

2019独角兽企业重金招聘Python工程师标准>>> 【防抖】 EIS防抖(电子防抖)和光学防抖 EIS(Electronic Image Stabilization)电子防抖主要指数码相机上采用强制提高CCD感光参数、同时加快快门并针对CCD上取得的图像进行分析,然后利用边缘图像进行补偿的防抖,电子…

JS中的防抖

防抖这里两个词可能对一些初入JavaScript的同学比较陌生,那这篇文章主要是针对这些同学们的,浅谈一下防抖 防抖: 1. "防抖"是什么 首先,先去解释一下什么叫做防抖, 在事件被触发n秒后再执行回调&#xff0c;如果在这n秒内又被触发&#xff0c;则重新计时。纯理论是…

关于Android 点击防抖动处理

我们使用app的时候&#xff0c;经常会因为某些原因出现双击的情况&#xff0c;比如点击一个按钮会弹出一个提示框&#xff0c;但是如果我们快速的点击按钮两次&#xff0c;这个时候会出现两个提示框。 双击跟抖动看似一样&#xff0c;其实不是&#xff0c;双击是一个完整的事件…

安卓点击防抖优化手册(非代码层指导)

### 1.1.1. 什么是点击防抖&#xff1f; &emsp;&emsp;在应用日常使用过程中&#xff0c;短时间内超过一次点击某个按钮会触发多次这个按钮的后续逻辑代码运行&#xff0c;这时加入某些手段屏蔽掉除第一次以外的点击事件去重复触发逻辑的控制称为点击防抖。 ### 1.1.…

Android【防抖操作的工具类】

防抖 public class OneClickUtil {private String methodName;public static final int MIN_CLICK_DELAY_TIME 1000;private long lastClickTime 0;public OneClickUtil(String methodName) {this.methodName methodName;}public String getMethodName() {return methodNam…

安卓 一个注解实现防抖

1、添加插件库 build.gradle&#xff08;project&#xff09;: dependencies {...// AOP 配置插件&#xff1a;https://github.com/HujiangTechnology/gradle_plugin_android_aspectjxclasspath com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10}allprojects {rep…

Android 功能防抖

功能防抖 理解的意思是防止短时间内多次点击或者输入导致的重复请求。 常见情景 1.Activity跳转&#xff0c;我们一般用Button写onClick监听然后跳转&#xff0c;如果你的目标Activity的启动模式为默认&#xff0c;会出现多次创建目标activity问题。 2.单控件多次点击请求网络…