从零開始学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 ...
随机推荐
- ASP.NET伪静态
http://www.duote.com/tech/5/14543.html 三.伪静态的坏处 当然犹如一篇文章的作者所说的:"如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线 ...
- 互斥锁属性PTHREAD_MUTEX_RECURSIVE
四.互斥锁属性 线程和线程的同步对象(互斥量,读写锁,条件变量)都具有属性.在修改属性前都需要对该结构进行初始化.使用后要把该结构回收.我们用pthread_ mutexattr_init函数对pth ...
- Jmeter相关
关于Jmeter,这里有一篇文章可以看看:http://www.cnblogs.com/TankXiao/p/4045439.html 给有需要的同学.
- UITabBarController 的配置
UITabBarController --> UITabBar Customizing Appearance backgroundImage 背景图片 selectedImageTintCol ...
- 微信小程序 - 文字收缩与展开
wxml <view class='containers'> <text class="content {{ellipsis?'ellipsis':'unellipsis' ...
- php之快速入门学习-18(PHP 面向对象)
PHP 面向对象 在面向对象的程序设计(英语:Object-oriented programming,缩写:OOP)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象. 在现实 ...
- Unix时间戳转换
import time def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(整 ...
- 如何设置mysql登陆密码?
此情况用于mysql密码为空. 命令如下: Mysqladmin –uroot password root1234 Root是用户名,root1234是新设置的密码
- SqlServer数据库分离与附加
SQL Server提供了“分离/附加”数据库.“备份/还原”数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用的“分离/附加”方法,类似于大家熟悉的“文件拷贝”方法,即把数据库文 ...
- python一键电影搜索与下载
代码地址如下:http://www.demodashi.com/demo/14313.html python一键电影搜索与下载 概述 使用python搜索并爬取豆瓣电影信息,包括评分,主演,导演,类型 ...