从零開始学android<mediaplayer自带播放器(视频播放).四十九.>
SurfaceHolder显示一个surface的抽象接口,使你能够控制surface的大小和格式。 以及在surface上编辑像素,和监视surace的改变。这个接口通常通过SurfaceView类实现。
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/play" /> <SurfaceView
android:id="@+id/surfaceview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/imageButton1" /> <ImageButton
android:id="@+id/imageButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/surfaceview"
android:layout_alignRight="@+id/surfaceview"
android:src="@drawable/stop" /> <ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/surfaceview"
android:layout_centerHorizontal="true"
android:layout_marginBottom="162dp"
/> </RelativeLayout>
</span>
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzYxNjk3Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
<span style="font-size:18px;">package com.example.mediaplayer2; import java.io.File; import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnHoverListener;
import android.widget.ImageButton;
import android.widget.ImageView; public class MainActivity extends Activity {
private ImageButton play = null;// 播放
private ImageButton stop = null;// 停止播放
private MediaPlayer media = null;
private ImageView image=null ;
private SurfaceView surfaceView = null;
private SurfaceHolder surfaceHolder = null;
private Boolean pauseFlag=false; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
this.play = (ImageButton) super.findViewById(R.id.imageButton1);
this.stop = (ImageButton) super.findViewById(R.id.imageButton2);
this.surfaceView = (SurfaceView) super.findViewById(R.id.surfaceview);// 实例化SurfaceView
this.surfaceHolder = this.surfaceView.getHolder();// 实例化SurfaceHolder
this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 设置格式
this.image=(ImageView)this.findViewById(R.id.imageView1);
this.media = new MediaPlayer();// 实例化MeidaPlayer组件
try {
// 取得SD卡上的视频文件
String path = Environment.getExternalStorageDirectory()
+ File.separator + "Movies" + File.separator + "abc.mp4";
// 设置资源
this.media.setDataSource(path); // 少了一些推断
} catch (Exception e) {
e.printStackTrace();
}
// 分别对開始播放盒停止播放进行监听
this.play.setOnClickListener(new PlayOnClickListenerImpl());
this.stop.setOnClickListener(new StopOnClickListenerImpl());
this.surfaceView.setOnClickListener(new pauseOrstart() );
this.surfaceView.setOnHoverListener(new OnHoverListener() { public boolean onHover(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (MainActivity.this.media.isPlaying()) {
MainActivity.this.image.setImageResource(R.drawable.stop); }
else {
MainActivity.this.image.setImageResource(R.drawable.play);
}
return true;
}
});
} private class PlayOnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// 设置音频格式啊
MainActivity.this.media
.setAudioStreamType(AudioManager.STREAM_MUSIC);
// 设置播放的范围
MainActivity.this.media.setDisplay(MainActivity.this.surfaceHolder);
try {
// 准备播放
MainActivity.this.media.prepare();
} catch (Exception e) {
}
// 開始播放
MainActivity.this.media.start();
} } private class StopOnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// 停止播放
if (MainActivity.this.media!=null) { MainActivity.this.media.stop();
}
}
}
private class pauseOrstart implements OnClickListener{ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (MainActivity.this.media!=null) { if (MainActivity.this.pauseFlag) {
MainActivity.this.media.start();
MainActivity.this.pauseFlag=false;
}
else {
MainActivity.this.media.pause();
MainActivity.this.pauseFlag=true;
}
}
}}
}
</span>
从零開始学android<mediaplayer自带播放器(视频播放).四十九.>的更多相关文章
- 从零開始学android<Bitmap图形组件.四十七.>
android.graphics.Bitmap(位图)是Android手机中专门提供的用于操作图片资源的操作类,使用此类能够直接从资源文件之中进行图片资源的读取.而且对这些图片进行一些简单的改动. 经 ...
- 从零開始学android<数据存储(1)SharedPreferences属性文件.三十五.>
在android中有五种保存数据的方法.各自是: Shared Preferences Store private primitive data in key-value pairs. 相应属性的键值 ...
- 第13章、布局Layouts之RelativeLayout相对布局(从零開始学Android)
RelativeLayout相对布局 RelativeLayout是一种相对布局,控件的位置是依照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最经常使用,也是最灵活的一种布 ...
- 从零開始学android<SeekBar滑动组件.二十二.>
拖动条能够由用户自己进行手工的调节,比如:当用户须要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构例如以下所看到的: java.lang.Object ↳ an ...
- 从零開始学android<TabHost标签组件.二十九.>
TabHost主要特点是能够在一个窗体中显示多组标签栏的内容,在Android系统之中每一个标签栏就称为一个Tab.而包括这多个标签栏的容器就将其称为TabHost.TabHost类的继承结构例如以下 ...
- 从零開始学android<Menu菜单组件.三十.>
在Android系统之中.菜单一共同拥有三类:选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 今天我们就用几个样例来分别介绍下菜单的使用 acti ...
- 从零開始学android<ImageSwitcher图片切换组件.二十六.>
ImageSwitcher组件的主要功能是完毕图片的切换显示,比如用户在进行图片浏览的时候.能够通过button点击一张张的切换显示的图片,并且使用ImageSwitcher组件在每次切换的时候也能够 ...
- 从零開始学android<RelativeLayout相对布局.十六.>
相对布局管理器指的是參考某一其它控件进行摆放,能够通过控制,将组件摆放在一个指定參考组件的上.下.左.右等位置,这些能够直接通过各个组件提供的属性完毕. 以下介绍一下各个方法的基本使用 No. 属性名 ...
- 从零開始学android<使用嵌套布局实现计算器界面.十七.>
所谓的嵌套布局就是在一个文件里嵌套多个布局文件 <span style="font-size:18px;"> <LinearLayout android:layo ...
随机推荐
- Python编程 - json字符串的解析
import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{& ...
- 转:Python yield 使用浅析
初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yiel ...
- VarPtr 得到地址 指针
在Basic语言演变成QBasic,然后到Visual Basic之前,VarPtr函数就已经存在了.开始,这个函数存在于VB运行库1.0版中.通过声明可以调用这个函数: Declare Functi ...
- 解压版MySQL安装后初始化root密码
1: C:\Users\gechong>mysql
- 1z0-052 q209_6
6: You executed this command to create a temporary table: SQL> CREATE GLOBAL TEMPORARY TABLE repo ...
- nexus 批量导入本地库
1.复制D:\maven\repository(本地仓库)到D:\sonatype-work\nexus\storage\central(nexus库路径) 2.Central --> upda ...
- Linux内核3.11的socket busy poll机制避免睡眠切换
Linux的网络协议栈很独立,上下通过两个接口分别和用户态以及设备相连.也能够看作是北向和南向接口...北向通过socket接口,南向通过qdisc接口(你能够觉得是上层的netdev queue,对 ...
- linux 浏览查看文件more,less,head,tail,cat,tac,od,nl命令使用简介
参考:linux 基本命令详解 cat,tac,nl,more,less,head,tail,od 命令more,less,head,tail,cat,tac,od,nl等是是使用Linux系统常用的 ...
- 使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL (转)
在访问现在很火的google plus时,细心的用户也许会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变.并且能够很好的支持浏览器的前进和后退.不禁让人想问,是什么有这么强大 ...
- Flume多Sink方案修正
在实际项目中采用http://www.cnblogs.com/moonandstar08/p/6091384.html方案进行布署时,由于系统产生的消费比较大按照原方案进行布署时,随着国外局点不断增加 ...