我有一个使用MediaStore.ACTION_IMAGE_CAPTURE
意图拍摄照片的应用,然后将照片返回到OnActivityResult
功能。
但是,我想将此替换为我自己的自定义相机活动,并将其集成到应用中。
有没有这方面的指南?我是Android的新手,我以前从未做过相机活动,或者把它连接到应用程序的其他部分。
感谢您的帮助
答案 0 :(得分:2)
Android开发者网页上有一个基本指南:
http://developer.android.com/guide/topics/media/camera.html#custom-camera
简而言之,您必须构建捕获图像所需的UI;通常你会想要一个取景器SurfaceView或TextureView,然后是一些控件。
然后,您需要创建一个Camera对象,将取景器连接到它,然后启动预览。一旦开始,您可以拍照,更改缩放等设置。
有关详细信息和示例代码,请参阅指南。
在Android L中,有一个全新的Camera2 API,功能更强大,但对于简单的用例,较旧的相机API可以正常工作。
答案 1 :(得分:0)
我希望你已经找到了你想要的答案,但是对于遇到这篇文章的其他人 - 我找到了一个很好的教程来制作你自己的相机应用程序。跳到底部,找到这个问题的相关简短答案。
https://www.youtube.com/watch?v=CuvVpsFc77w&list=PL9jCwTXYWjDIHNEGtsRdCTk79I9-95TbJ是我用DAYS试图强制我的文件输入接受旋转图像后制作相机应用程序的。
原生相机应用让我很头疼(我也是Android新手)。我的文件输入太快(通过Webview)捕获图像,所以我尝试制作自己的相机应用程序来解决这个问题。 进行其他活动并输入相机代码 。当action.image.capture扫描应用程序时,它会弹出。我实际上更换了原生相机(但它只是显示了MainAppName,而不是专门的相机......如果点击它,自定义相机就会打开。我的确如此。)
制作我自己的相机应用让我意识到无论如何它始终保存在风景中。我伤心欲绝。 因此,对于那些想要使用自定义相机的人来说,他们需要在那里旋转它,只需获取活动结果上的数据就可以了:
Bitmap bitmap = BitmapFactory.decodeFile(mImageFileLocation);
Bitmap rotatedBitmap = rotateImage(bitmap);
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(photoFile);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
private Bitmap rotateImage(Bitmap bitmap) {
ExifInterface exifInterface = null;
try {
exifInterface = new ExifInterface(mImageFileLocation);
} catch (IOException e) {
e.printStackTrace();
}
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
Matrix matrix = new Matrix();
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.setRotate(90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.setRotate(180);
break;
default:
}
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
return rotatedBitmap;
注意:RotateImage()不是OnActivity Result
的一部分以上代码并不完全是主题,但我认为由于原生相机问题,很多人都想替换媒体商店选项。
答案:要让您的自定义相机弹出:只需制作另一个活动并在那里写下您的相机代码。不要从Action Image Capture中更改它,否则它将无法正常返回(不要像我一样)。
您还可以直接设置意图以启动新的相机活动。
而不是startActivityForResult(chooseBetweenTheseIntent, FILECHOOSER_RESULTCODE);
使用:
startActivityForResult(directCustomCameraIntent, FILECHOOSER_RESULTCODE)
再说一次,不要像我一样。 startActivityForResult用于从活动中获取结果,而不是将其更改为startActivity。
旁注:同一个YouTube教程人员也有旋转图像的视频。您不需要自定义应用程序进行旋转,只需像上面的代码一样制作位图,旋转它,然后将其写回onActivityResult顶部的原始文件,以及任何抓取该文件将具有正确的格式。