【发布时间】:2014-01-08 04:33:48
【问题描述】:
现在我想要的只是一个在启动时从相机中拍照的应用程序。没有布局,没有相机预览......什么都没有,只是一个简单的应用程序图标来启动应用程序。一旦启动,相机应该会拍照。
这是预览图像,我不想出现在我的应用中。我只想让我的应用程序点击图片中环绕的拍照按钮:
拍完照片后,我需要将其保存在我的照片库中。
有人可以在这里指导我吗?谢谢
这是我在模拟器和设备上尝试过的一些代码。
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class Main extends Activity implements SurfaceHolder.Callback{
private Camera camera;
private ImageButton cameraClick;
private SurfaceHolder mHolder;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
mHolder = surfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
cameraClick = (ImageButton) findViewById(R.id.cameraClick);
cameraClick.setOnClickListener( new OnClickListener() {
public void onClick(View v)
{
camera.takePicture(shutterCallback, rawCallback,jpegCallback);
}
});
}
// Handles when shutter open
ShutterCallback shutterCallback = new ShutterCallback()
{
public void onShutter()
{
}
};
/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback()
{
public void onPictureTaken(byte[] data, Camera camera)
{
}
};
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback()
{
public void onPictureTaken(byte[] data, Camera camera)
{
// we do something using return byte[] of taken image.
}
};
@Override
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height)
{
// Set camera preview size,orientation,rotation using parameters
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
}
catch (IOException e)
{
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
camera.stopPreview();
camera.release();
camera = null;
}
}
现在我可以听到点击模拟器和设备上的按钮的图片。现在我也想保存图片。有什么线索吗?
【问题讨论】:
-
我查看了示例代码。任何地方都没有提到这样的功能或特性。
-
如果我正确理解了您的问题,您只需要整个布局中的一个按钮,在点击时点击照片而不进行预览吗?
-
@AbhishekV 绝对正确!这是我需要的。
-
那么您提供的答案应该可以正常工作
-
@Muhammad Maqsoodur R 在任何可以隐藏surfaceView的布局后面使用surfaceView。在您的情况下,通过在该表面视图上进行设计布局来隐藏表面视图