android变焦,Android开发:控制镜头变焦
特别针对三星盖世相机: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{
@Override
public 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(){
@Override
public void onClick(View v) {
initCamera();
}
});
myButton2.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
if(myCamera!=null&&isPreview){
myCamera.stopPreview();
myCamera.release();
myCamera = null;
isPreview = false;
}
}
});
}
public void initCamera() {
// TODO Auto-generated method stub
Log.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;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public 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
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@+id/mySurfaceView"
android:layout_width="match_parent"
android:layout_height="418dp" >
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打开"/>
android:id="@+id/myButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关闭" />
注意加上权限:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (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开发:控制镜头变焦相关推荐
- Android多媒体应用开发-控制摄像头拍照
现在的手机的功能可谓是五花八门,手机照相功能就是特别突出的一点,现在的手机照相机甚至成了专业数码照相机,可以拍摄出清晰的照片和录制高分辨率的视频.Android操作系统呢,提供了相应的功能来控制拍照: ...
- Android camera 相关术语(四) 之 变焦和对焦的区别VCM 闭环和开环在硬件上有什么区别
Android camera 相关术语(四) 之 变焦和对焦的区别VCM 闭环和开环在硬件上有什么区别 VCM 闭环马达(即close loop)与开环马达(即open loop)一般有两个硬件上的 ...
- Android短视频开发都需要什么技术?
今天我们来讲点干货,估计来看这篇帖子的人都知道短视频APP有多火,也都知道安卓系统在手机系统中占的市场份额有多大,那我就不多嘴巴拉巴拉一些行业背景了,以下我着重讲一讲Android端的短视频开发技术. ...
- android短视频技术,Android短视频开发都需要什么技术?
今天我们来讲点干货,估计来看这篇帖子的人都知道短视频APP有多火,也都知道安卓系统在手机系统中占的市场份额有多大,那我就不多嘴巴拉巴拉一些行业背景了,以下我着重讲一讲Android端的短视频开发技术. ...
- Android直播开发之旅(9):OkCamera,Android 相机应用开发通用库
OkCamera,Android 相机应用开发通用库 转载请声明出处:http://blog.csdn.net/andrexpert/article/details/79302576 明天就可以回家过 ...
- 蓝牙模块hc05原理图_使用步进电机和Android App的蓝牙控制迷你升降机
背景知识视频教程 使用App Inventor创建Android应用viadean.com Arduino微控制器:学习Arduino制作项目 - 国外课栈viadean.com Arduino ...
- Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...
- Android 音视频开发学习思路
Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 初级入门篇: Android 音视频开发(一) ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
2019独角兽企业重金招聘Python工程师标准>>> 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不 ...
最新文章
- HDU-2044-一只小蜜蜂
- Unknown lifecycle phase mvn
- 项目管理理论与实践(4)——UML应用(上)
- shell逻辑运算符优先级_ios从入门到放弃之C基础巩固运算符
- swift菜鸟入门视频教程-09-类和结构体
- Maven本地库添加Oracle JDBC驱动
- python导入opencv解决no module named cv2问题
- Tensorflow 实战 Google 深度学习框架(第2版)---- 10.2.2节 P272 代码
- 报错ValueError: check_hostname requires server_hostname
- 回归预测 | MATLAB实现GLM广义线性模型数据回归预测
- 怎么把知网的外文文献翻译成中文_中国知网上的汉语文献的英文版在哪里找
- matlab 怎么画时域图,matlab画e时域波形图
- Leetcode 1770. Maximum Score from Performing Multiplication Operations [Python]
- The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 0 维度不匹配
- 关于拼板邮票孔制作规范
- JMF API 中文指导
- urp SpotLight 衰减方式扩展
- 论文阅读笔记:Improving Attacks on Speck32 / 64 using Deep Learning
- 云电竞的服务器,雷风科技电竞云桌面解决方案
- 小学五年级趣味计算机课程,新媒体联盟 | 五年级小学段课程记——项目研究乐游学 趣味活动展风采...