【SurfaceView】SurfaceView的初步学习
来源:互联网 发布:网络荐股骗局 编辑:程序博客网 时间:2024/04/29 18:22
SurfaceView简单理解
SurfaceView是什么?
SurfaceView也是View的子类,但是一般的View是在主线程中绘制界面并且能够直接显示在界面上的,SurfaceView则是在子线程中绘制view的,在界面上能够实时的看到效果。
SurfaceView使用:自定义相机等…….
demo功能
MediaPlayer 播放视频,三个按钮对MediaPlayer进行控制(开始,暂停,停止)
涉及知识: MediaPlayer、SurfaceView、SurfaceHolder
个人理解:
MediaPlayer 通过SurfaceView来显示视频界面,直接MediaPlayer的时候只会播放出声音
SurfaceHolder 在SurfaceHolder.callBack方法的指定方法中才有效,其他地方引用holder 显示已经被release了
demo效果
由于涉及到视频播放,项目就比较大了 ,这里没有上传代码进行备份,只贴出部分代码
效果:
这是在海马上的效果,海马上并不能播放,看到在as中有报错,大致的布局是这个样子。将apk拷贝到手机上,未出错。
操作
将视频文件as项目中,放到哪里呢?
在res中新建文件夹,命名为raw,将视频文件放到该文件夹下——test.mp4
layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp"> <SurfaceView android:id="@+id/sv_audio" android:layout_width="match_parent" android:layout_height="300dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始" /> <Button android:id="@+id/btn_pause" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="暂停 " /> <Button android:id="@+id/btn_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="终止" /> </LinearLayout></LinearLayout>
MainActivity:
package com.tjstudy.surfaceviewdemo;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Button;/** * MediaPlayer 播放视频 * <p/> * MediaPlayer SurfaceView SurfaceHolder * <p/> * MediaPlayer 通过SurfaceView来显示视频界面,直接MediaPlayer的时候只会播放出声音 * SurfaceHolder 在SurfaceHolder.callBack方法的指定方法中才有效,其他地方引用holder 显示已经被release了 */public class MainActivity extends AppCompatActivity implements View.OnClickListener { private SurfaceView svAudio; private Button btnStart; private Button btnPause; private Button btnStop; private MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setMediaPlayer(); setListener(); } private void setListener() { btnStart.setOnClickListener(this); btnPause.setOnClickListener(this); btnStop.setOnClickListener(this); } private void setMediaPlayer() { mediaPlayer = MediaPlayer.create(this, R.raw.test);//创建MediaPlayer实体 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置MediaPlayer的格式 SurfaceHolder holder = svAudio.getHolder();//SurfaceView的设置 callBack里面的holder才是有效的 holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer.setDisplay(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }); } private void initView() { svAudio = (SurfaceView) findViewById(R.id.sv_audio); btnStart = (Button) findViewById(R.id.btn_start); btnPause = (Button) findViewById(R.id.btn_pause); btnStop = (Button) findViewById(R.id.btn_stop); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.btn_start: mediaPlayer.start(); break; case R.id.btn_pause: mediaPlayer.pause(); break; case R.id.btn_stop: mediaPlayer.stop(); break; } }}
0 0
- 【SurfaceView】SurfaceView的初步学习
- SurfaceView的初步认识
- SurfaceView初步
- SurfaceView的学习
- SurfaceView的学习01
- SurfaceView的学习
- Android SurfaceView的学习
- SurfaceView学习
- surfaceView学习
- SurfaceView学习
- SurfaceView学习
- SurfaceView学习
- SurfaceView学习
- SurfaceView学习
- surfaceview
- SurfaceView
- surfaceview
- surfaceview
- Solr6 集群
- android Mvp模式
- BroadCastReceiver
- python中re模块详解
- 库、链接资源汇总
- 【SurfaceView】SurfaceView的初步学习
- [转]H264码流结构分析
- 欢迎使用CSDN-markdown编辑器
- 让你快速解开对copy、mutableCopy,深复制和浅复制的疑惑
- Android开发之XML文件的解析的三种方法
- 在ubuntu中使用java版的spark
- 类的动态加载-2
- mysql 存储过程(二)
- [转]MP4文件格式的解析及分割算法