特别针对三星盖世相机: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
<?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"
>
<Button
android: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
@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");
}
}