- 浏览: 284778 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
sunxiangyuan131415:
android中设置ListView的选中的Item的背景颜色 -
liu321jie:
正需要呢,非常感谢!!!!!!!!!!
android中设置ListView的选中的Item的背景颜色 -
tmacbo.:
楼主给力!
android中设置ListView的选中的Item的背景颜色 -
eieihihi:
哪里用那么麻烦,ListView().setChoiceMod ...
android中设置ListView的选中的Item的背景颜色 -
雨雾纷飞:
正需要,谢谢分享!
android中设置ListView的选中的Item的背景颜色
转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以便以后学习和查询!
Android自带的Camera应用虽然可以满足大多数情景,但是其灵活性上还有不足。但是Android允许我们定制自己的Camera。
在Android的hardware包中有一个Camera类。这个类就是获取Camera服务的,可以定制Camera等。
可以通过open()方法获取其实例。
在使用这个类是需要在AndroidManifest.xml文件中加入相应的权限和特性
如:
<uses-permission android:name = "android.permission.CAMERA" />
<uses-feature android:name = "android.hardware.camera" />
<uses-feature android:name = "android.hardware.camera.autofocus" />
等。
本文实例:
package demo.camera; import java.io.OutputStream; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.content.ContentValues; import android.content.res.Configuration; import android.hardware.Camera; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.LinearLayout; /** * Android自带的Camera应用程序可以完成很多功能。但是当其不能满足我们需要的时候 * 我们可以定制自己的Camera。Android提供了Camera类来辅助我们实现自己的Camera。 * 这个例子就来定义一个自己的Camera * 首先,在Manifest中需要引入权限<uses-permission android:name="android:permission.CAMERA"/> * 我们需要用来存放取景器的容器,这个容器就是SurfaceView。 * 使用SurfaceView的同时,我们还需要使用到SurfaceHolder,SurfaceHolder相当于一个监听器,可以监听 * Surface上的变化,通过其内部类CallBack来实现。 * 为了可以获取图片,我们需要使用Camera的takePicture方法同时我们需要实现Camera.PictureCallBack类,实现onPictureTaken方法 * @author Administrator * */ public class MyCamera extends Activity implements SurfaceHolder.Callback,Camera.PictureCallback{ public static final int MAX_WIDTH = 200; public static final int MAX_HEIGHT = 200; private SurfaceView surfaceView; private Camera camera; //这个是hardare的Camera对象 public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); this.setContentView(R.layout.camera); surfaceView = (SurfaceView)this.findViewById(R.id.myCameraView); surfaceView.setFocusable(true); surfaceView.setFocusableInTouchMode(true); surfaceView.setClickable(true); surfaceView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { camera.takePicture(null, null, null, MyCamera.this); } }); //SurfaceView中的getHolder方法可以获取到一个SurfaceHolder实例 SurfaceHolder holder = surfaceView.getHolder(); //为了实现照片预览功能,需要将SurfaceHolder的类型设置为PUSH //这样,画图缓存就由Camera类来管理,画图缓存是独立于Surface的 holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); holder.addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { } @Override public void surfaceCreated(SurfaceHolder holder) { // 当Surface被创建的时候,该方法被调用,可以在这里实例化Camera对象 //同时可以对Camera进行定制 camera = Camera.open(); //获取Camera实例 /** * Camera对象中含有一个内部类Camera.Parameters.该类可以对Camera的特性进行定制 * 在Parameters中设置完成后,需要调用Camera.setParameters()方法,相应的设置才会生效 * 由于不同的设备,Camera的特性是不同的,所以在设置时,需要首先判断设备对应的特性,再加以设置 * 比如在调用setEffects之前最好先调用getSupportedColorEffects。如果设备不支持颜色特性,那么该方法将 * 返回一个null */ try { Camera.Parameters param = camera.getParameters(); if(this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE){ //如果是竖屏 param.set("orientation", "portrait"); //在2.2以上可以使用 //camera.setDisplayOrientation(90); }else{ param.set("orientation", "landscape"); //在2.2以上可以使用 //camera.setDisplayOrientation(0); } //首先获取系统设备支持的所有颜色特效,有复合我们的,则设置;否则不设置 List<String> colorEffects = param.getSupportedColorEffects(); Iterator<String> colorItor = colorEffects.iterator(); while(colorItor.hasNext()){ String currColor = colorItor.next(); if(currColor.equals(Camera.Parameters.EFFECT_SOLARIZE)){ param.setColorEffect(Camera.Parameters.EFFECT_SOLARIZE); break; } } //设置完成需要再次调用setParameter方法才能生效 camera.setParameters(param); camera.setPreviewDisplay(holder); /** * 在显示了预览后,我们有时候希望限制预览的Size * 我们并不是自己指定一个SIze而是指定一个Size,然后 * 获取系统支持的SIZE,然后选择一个比指定SIZE小且最接近所指定SIZE的一个 * Camera.Size对象就是该SIZE。 * */ int bestWidth = 0; int bestHeight = 0; List<Camera.Size> sizeList = param.getSupportedPreviewSizes(); //如果sizeList只有一个我们也没有必要做什么了,因为就他一个别无选择 if(sizeList.size() > 1){ Iterator<Camera.Size> itor = sizeList.iterator(); while(itor.hasNext()){ Camera.Size cur = itor.next(); if(cur.width > bestWidth && cur.height>bestHeight && cur.width <MAX_WIDTH && cur.height < MAX_HEIGHT){ bestWidth = cur.width; bestHeight = cur.height; } } if(bestWidth != 0 && bestHeight != 0){ param.setPreviewSize(bestWidth, bestHeight); //这里改变了SIze后,我们还要告诉SurfaceView,否则,Surface将不会改变大小,进入Camera的图像将质量很差 surfaceView.setLayoutParams(new LinearLayout.LayoutParams(bestWidth, bestHeight)); } } camera.setParameters(param); } catch (Exception e) { // 如果出现异常,则释放Camera对象 camera.release(); } //启动预览功能 camera.startPreview(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 当Surface被销毁的时候,该方法被调用 //在这里需要释放Camera资源 camera.stopPreview(); camera.release(); } @Override public void onPictureTaken(byte[] data, Camera camera) { // data是一个原始的JPEG图像数据, //在这里我们可以存储图片,很显然可以采用MediaStore //注意保存图片后,再次调用startPreview()回到预览 Uri imageUri = this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues()); try { OutputStream os = this.getContentResolver().openOutputStream(imageUri); os.write(data); os.flush(); os.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } camera.startPreview(); } }
转自chenjie19891104的的博客(http://blog.csdn.net/chenjie19891104/article/category/756236),以
便以后学习和查询!
学习总结:
1、要使用Camera,需要在Manifest.xml中添加下面三个权限
<uses-permission android:name = "android.permission.CAMERA" />
<uses-feature android:name = "android.hardware.camera" />
<uses-feature android:name = "android.hardware.camera.autofocus" />
2、要使用SurfaceView存取景的容器,要用到SurfaceHolder,SurfaceHolder相当于一个监听器,
通过其内部类SurfaceHolder.Callback来实现监听变化。
3、为了可以获取图片,我们需要使用Camera的takePicture方法同时我们需要实现Camera.PictureCallBack类,
实现onPictureTaken方法.
4、SurfaceView对象获取SurfaceHolder,并且设置SurfaceHolder的监听器
//SurfaceView中的getHolder方法可以获取到一个SurfaceHolder实例
SurfaceHolder holder = surfaceView.getHolder();
//为了实现照片预览功能,需要将SurfaceHolder的类型设置为PUSH
//这样,画图缓存就由Camera类来管理,画图缓存是独立于Surface的
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//设置毁掉函数,SurfaceHolder.Callback
holder.addCallback(this);
5、Camera的一些方法
camera = Camera.open(); //获取Camera实例
//获取Camera的参数
Camera.Parameters param = camera.getParameters();
//设置显示的大小
param.setPreviewSize(bestWidth, bestHeight);
//这里改变了SIze后,我们还要告诉SurfaceView,否则,Surface将不会改变大小,进入Camera的图像将质量很差
surfaceView.setLayoutParams(new LinearLayout.LayoutParams(bestWidth, bestHeight));
//设置完成需要再次调用setParameter方法才能生效
camera.setParameters(param);
//把Camera与SurfaceHolder联系起来
camera.setPreviewDisplay(holder);
//如果有异常,释放掉Camera
camera.release();
//启动预览功能
camera.startPreview();
//停止预览
camera.stopPreview();
6、Camera.PictureCallBack是实现Camera的takePicture方法的接口
把接口和Camera联系起来
//Camera.PictureCallBack
camera.takePicture(null, null, null, MyCamera.this);
7、实现onPictureTaken方法
// data是一个原始的JPEG图像数据,
//在这里我们可以存储图片,很显然可以采用MediaStore
//注意保存图片后,再次调用startPreview()回到预览
Uri imageUri = this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
try {
OutputStream os = this.getContentResolver().openOutputStream(imageUri);
os.write(data);
os.flush();
os.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
camera.startPreview();
发表评论
-
(转)Android多媒体学习十五:使用在内置的Camera录制视频
2012-09-14 15:33 0Android多媒体学习十五:使用在内置的Camera录制视频 ... -
(转)Android多媒体学习十四:播放网络上的视频
2012-09-14 15:32 0Android多媒体学习十四:播放网络上的视频 Andro ... -
(转)Android多媒体学习十三:检索MediaStore中的Video和其对应的缩略图信息
2012-09-14 15:31 0Android多媒体学习十三:检索MediaStore中的Vi ... -
(转)Android多媒体学习十二:Android中Video的三种播放方式的实现
2012-09-14 15:30 0Android多媒体学习十二:Android中Video的三种 ... -
(转)Android多媒体学习十一:实现仿百度图片查看功能
2012-09-14 15:27 0Android多媒体学习十一:实现仿百度图片查看功能 ... -
(转)Android多媒体学习十:利用AudioRecord类实现自己的音频录制程序
2012-09-17 09:28 2019Android多媒体学习十:利用AudioRecord类实现自 ... -
(转)Android多媒体学习九:利用MediaRecorder类实现自己的音频录制程序
2012-09-17 09:28 3768在上一篇中,我们在代码中有 case R.i ... -
(转)Android多媒体学习八:调用Android自带的音频录制程序,实现录制
2012-09-17 09:28 1723Android多媒体学习八:调用Android自带的音频录制程 ... -
(转)Android多媒体学习七:访问网络上的Audio对应的M3U文件,实现网络音频流的播放
2012-09-17 09:27 1379Android多媒体学习七:访问网络上的Audio对应的M3U ... -
(转)Android多媒体学习六:利用Service实现背景音乐的播放
2012-09-17 09:27 2900Android允许我们使用Service组件来完成后台任 ... -
(转)Android多媒体学习五:调用Android自带的播放器播放Audio
2012-09-14 15:13 1062转自chenjie19891104的的博客(http:/ ... -
(转)Android多媒体学习四:实现图像的编辑和合成
2012-09-14 15:12 990import java.io.FileNotFoundExce ... -
(转)Android多媒体学习二:检索Android的图片库,并显示
2012-09-14 15:08 2869转自chenjie19891104的的博客(http://bl ... -
(转)Android多媒体学习一:Android中Image的简单实例。
2012-09-14 15:04 1576转自http://blog.csdn.net/chenj ...
相关推荐
在Android平台上,多媒体功能是应用...掌握Camera API、理解布局设计、处理权限和图像处理,这些都是成为Android多媒体大师的必备技能。通过不断实践和优化,你可以创建出功能强大、用户体验优秀的自定义Camera应用。
这个“android多媒体学习代码”压缩包包含了一系列的示例项目,帮助开发者深入理解如何在Android应用中处理图像、音频、视频以及利用绘图和动画功能。下面将详细介绍这些知识点。 1. **Android绘图**: Android...
通过 Android 的 Camera 框架,可以实现多种多媒体应用,例如照片拍摄、视频录制、图片编辑等。 本节知识点总结: * Android Camera 框架架构 * Camera Driver 和 Camera Service 的作用 * 使用 Camera Intent ...
在Android平台上,USB摄像头(UVC - USB Video Class)的集成和使用是一个复杂但非常实用的技术。本项目"androidusbcamera.rar"提供...通过深入研究和理解这个项目,可以提升对Android多媒体框架和USB设备交互的理解。
《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》是一本针对Android平台多媒体开发的详尽指南,旨在帮助Android程序员、研发人员以及对此领域感兴趣的爱好者掌握核心技能,从基础到高级,从理论到实践...
总的来说,"Android 采用MediaCodec实现Camera预览视频编解码"涉及了Android多媒体处理的核心技术,包括MediaCodec的使用、Camera2 API的集成以及视频编码和容器格式的相关知识。通过深入理解这些概念和实践,开发者...
【UVCCamera】是一个专为Android设备设计的开源库,用于实现通过USB接口连接并控制USB摄像头的功能。这个库使得开发者能够在Android手机、平板、大屏设备甚至开发板上利用USB摄像头进行视频采集和图像处理,极大地...
在Android平台上进行多媒体编程是一...通过理解和掌握以上知识点,开发者可以构建出功能丰富的Android多媒体应用,为用户提供丰富的视听体验。在实际开发中,应结合具体需求灵活运用,同时注意性能优化和用户体验设计。
《Android v4l2 camera apk:开启Android相机设备的新维度》 在移动设备领域,Android系统因其开源性和灵活性,已经成为开发者的重要平台。Android v4l2 camera apk是针对这一平台设计的一款应用程序,它专为...
在Android平台上,USBCamera(USB摄像头)的使用通常是通过第三方库实现的,因为原生Android SDK并未提供直接支持。其中,UVCCamera是广泛应用于Android USBCamera开发的一个开源库,它允许开发者将USB摄像头集成到...
"AndroidUsb摄像头Demo"项目涵盖了Android平台与USB摄像头交互的多个关键技术点,从设备枚举、权限管理到实时预览、录像拍照及录音功能的实现,开发者可以通过这个项目学习到如何扩展Android设备的多媒体能力。
Android多媒体系统架构复杂,包含了多个层级,主要包括: - **应用层**: 包括用户界面以及应用程序,例如音乐播放器、视频播放器等。 - **Java框架**: 提供了多媒体相关的Java API,例如`android.media.*`类。 - **...
这些是Android多媒体技术的基础知识点,开发者通常会结合这些API和工具来实现丰富的多媒体应用功能。在实际开发中,还需要考虑性能优化、内存管理以及不同设备的兼容性等问题。如果博客中包含了具体的示例代码,那么...
在Android平台上,多媒体功能是应用程序开发中的重要组成部分,特别是与图像和视频相关的功能。本教程将深入探讨如何使用Camera类来实现拍照功能。Camera类是Android SDK提供的核心组件,允许开发者控制设备的摄像头...
本节将深入探讨Android多媒体开发的高级编程技巧,帮助开发者实现更高效、更丰富的多媒体应用。 1. **多媒体框架概述** Android的多媒体框架基于开放移动联盟(OMA)的开放移动 Alliance Digital Media ...
在Android平台上,开发一款应用程序,将camera捕获的视频与录制的音频合成为MP4文件,通常涉及到多媒体处理和编码技术。在这个项目中,开发者采用了FFmpeg 4.0库来实现这一功能。FFmpeg是一个强大的开源多媒体处理...
在Android系统中,Camera是一个至关重要的组件,它允许开发者创建丰富的多媒体应用,如拍照、录像、实时滤镜等。理解Android框架下Camera的设计与实现,对于开发高效且用户体验良好的拍照应用至关重要。 首先,...
在Android系统中,Camera是一个非常重要的组件,它允许开发者创建丰富的多媒体应用,提供拍照、录像等功能。这个压缩包文件包含了一系列与Android Camera问题相关的文档,涵盖了从基础问题解决到深入的技术分析。...
《Android多媒体开发高级编程》由Shawn Van Every撰写,是一本深入探讨Android平台上多媒体开发的专著。这本书针对想要在Android应用中实现高效、流畅多媒体功能的开发者,提供了丰富的实践经验和详细的技术指导。 ...
总之,"Android 多媒体文件选择器" 提供了一个高效、灵活的选择工具,可以帮助开发者快速实现多媒体选择功能,同时具备与社交网络集成的能力,极大地丰富了用户体验。通过理解和定制这个项目,开发者可以构建出更加...