surfaceview

Android 提高篇 6 之MediaPlayer

折月煮酒 提交于 2020-03-06 03:39:55
前面写了十四篇关于界面的入门文章,大家都看完和跟着练习之后,对于常用的Layout和View都会有一定的了解了,接下来的文章就不再强调介绍界面了,而是针对具体的常见功能而展开。 本文介绍MediaPlayer的使用。MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。 先贴出本文程序运行结果的截图,上面是播放/停止音频,可用SeekBar来调进度,下面是播放/停止视频,也是用SeekBar来调进度: main.xml的源码: view plaincopy to clipboardprint? <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android=" http://schemas

提高第一篇之MediaPlayer

隐身守侯 提交于 2020-03-06 02:58:14
MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。 main.xml的源码: <? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout android:id = "@+id/LinearLayout01" android:layout_width = "fill_parent" android:layout_height = "fill_parent" xmlns:android = " http://schemas.android.com/apk/res/android " android:orientation = "vertical" > < SeekBar android:id = "@+id/SeekBar01" android:layout_height = "wrap_content" android:layout_width = "fill_parent" > </ SeekBar >

SurfaceView+MediaPlayer播放视频

て烟熏妆下的殇ゞ 提交于 2020-03-06 02:56:04
  SurfaceView拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行行绘制。又由于不占用主线程资源,SurfaceView一方面可以实现复杂而高效的UI,另一方面又不会导致用户输入得不到及时响应。 Android 三种播放视频的方式: http://www.cnblogs.com/eustoma/p/4479363.html Android之SurfaceView实现视频播放: http://www.cnblogs.com/devinzhang/archive/2012/02/03/2337576.html 结合 MediaPlayer 类的简单播放器 public class SurfaceMediaPlayer extends Activity {   SurfaceView surfaceView;   MediaPlayer mediaPlayer;   public void onCreate (Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_surface_media_player);     mediaPlayer=new MediaPlayer();    

Android中的Surface和SurfaceView

自闭症网瘾萝莉.ら 提交于 2020-02-12 03:13:35
转自:http://technicalsearch.iteye.com/blog/1967616 一、什么是Surface 简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface的Canvas上(后面有原因解释)。传统的view共享一块屏幕缓冲区,所有的绘制必须在UI线程中进行。 在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器(screen compositor)所管理的原始缓冲区的句柄”,这句话包括下面两个意思: 1、通过Surface(因为Surface是句柄)就可以获得原生缓冲器以及其中的内容。就像在C++语言中,可以通过一个文件的句柄,就可以获得文件的内容一样。 2、 原始缓冲区(a raw buffer)是用于保存当前窗口的像素数据的。 引伸地,可以认为Android中的Surface就是一个用来画图形(graphics)或图像(image)的地方。 根据Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的,由此,可以推知一个Surface对象中应该包含有一个Canvas(画布)对象。因此

Android中的Surface和SurfaceView

只愿长相守 提交于 2020-02-12 03:07:36
一、什么是Surface 简单的说 Surface对应了一块屏幕缓冲区,每个window对应一个 Surface,任何View都要画在 Surface的 Canvas上(后面有原因解释)。传统的view共享一块屏幕缓冲区,所有的绘制必须在UI线程中进行。 在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器(screen compositor)所管理的原始缓冲区的句柄”,这句话包括下面两个意思: 1、通过Surface(因为Surface是句柄)就可以获得原生缓冲器以及其中的内容。就像在C++语言中,可以通过一个文件的句柄,就可以获得文件的内容一样。 2、 原始缓冲区(a raw buffer)是用于保存当前窗口的像素数据的。 引伸地,可以认为Android中的Surface就是一个用来画图形(graphics)或图像(image)的地方。 根据Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的,由此,可以推知一个Surface对象中应该包含有一个Canvas(画布)对象。因此,在前面提及的两个意思的基础上,可以再加上一条: 3、Surface中有一个Canvas成员

Android: SurfaceView

空扰寡人 提交于 2020-02-06 06:24:44
问题 I have SurfaceView with setZOrderOnTop(true) .This flag is needed for the transparent SurfaceView's background during the drawing process. How can I display any View in front of it? 回答1: SurfaceViews are not designed to be composited with other views. As described in the doc for setZOrderOnTop, once you set this mode, none of the other window contents will be visible on top of the SurfaceView. If you want to do compositing, you will have to do it yourself, off-screen, then draw the results

Add custom view as a view of XML layout

好久不见. 提交于 2020-01-28 11:21:26
问题 The scenario is the following: I have an activity RunTrainingWorkoutsView that uses XML layout _run_workout.xml_ with some labels that are updated by CountDownTimer . Works fine... Now, apart from labels that are updated every sec by onTick() callback method of CountDownTimer object I want to add a custom surface view to my _run_workout.xml layout_ that would draw some arcs updated by the same onTick() method every second... my run_workout.xml: <training.timer.CounterClockView android:id="@

Add custom view as a view of XML layout

北城以北 提交于 2020-01-28 11:21:05
问题 The scenario is the following: I have an activity RunTrainingWorkoutsView that uses XML layout _run_workout.xml_ with some labels that are updated by CountDownTimer . Works fine... Now, apart from labels that are updated every sec by onTick() callback method of CountDownTimer object I want to add a custom surface view to my _run_workout.xml layout_ that would draw some arcs updated by the same onTick() method every second... my run_workout.xml: <training.timer.CounterClockView android:id="@

音视频:使用三种方式绘制图片

亡梦爱人 提交于 2020-01-25 12:29:07
由于视频的渲染,本质上就是显示一张一张的图片,所以学习第一步就是学习显示图片。 这次我们使用三种不同的方式来显示一张图片。 ImageView 使用 ImageView 是最简单也是最常用的方式了。 context?.let { image.setImageBitmap(decodeStream(it.assets.open("images/test_image.jpeg"))) } SurfaceView 我们知道View是通过刷新来重绘视图,系统通过发出 VSSYNC 信号来进行屏幕的重绘,刷新的时间间隔是 16 ms,如果我们可以在 16 ms 以内将绘制工作完成,则没有任何问题,如果我们绘制过程逻辑很复杂,而且我们的界面更新还非常频繁,这时候就会造成界面的卡顿,影响用户体验。为此Android提供了 SurfaceView 来解决这一问题。 SurfaceView 和 View 有什么区别? View 适用于被动更新的场景,而 SurfaceView 适用于主动更新的情况,比如频繁的刷新界面。(具体原因见下条) View 在主线程中对页面进行刷新,而 SurfaceView 则开启一个子线程来对页面进行刷新。(最本质的区别) View 在绘图的时候没有双缓冲机制,而 SurfaceView 在底层中实现了双缓冲机制。 代码 最后肯定要上代码的 [狗头]

How to create multiple camera2 previews in most efficient way?

偶尔善良 提交于 2020-01-25 09:00:27
问题 I am trying to create 4 streams of my camera preview on my activity. I created a TextureView which is registered to the camera2 API for the feed and then I set up a listener on the SurfaceView in order to listen to changes for the feed and update the other 3 previews (ImageViews) accordingly. You can see in my code below: private final TextureView.SurfaceTextureListener mSurfaceTextureListener = new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable