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");}}


原创粉丝点击