ch019 Android surfaceView
--------------------------------------------AndroidManifest.xml----------------------------------
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.ch19"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
--------------------------------------------activity_main.xml-------------------------------------
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1"
android:orientation="vertical">
<SurfaceView
android:id="@+id/surfaceVIew"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.15"
tools:context=".MainActivity"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.85">
<Button
android:id="@+id/btn1"
android:text="开唱"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn2"
android:text="暂停"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn3"
android:text="停止"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn4"
android:text="调低音量"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn5"
android:text="调高音量"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
--------------------------------------------MainActivity.java--------------------------------------
packagecom.ch19;
importjava.io.File;
importjava.io.IOException;
importandroid.app.Activity;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.util.Log;
importandroid.view.SurfaceHolder;
importandroid.view.SurfaceView;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.Button;
/**
*
*项目名称:com.ch19
*类名称:MainActivity
*类描述:播放、暂停、停止、增加音量、减少音量
*创建人:方勇
*创建时间:2012-11-29下午1:36:47
*Copyright(c)方勇-版权所有
*/
publicclassMainActivityextendsActivity{
privateButtonbtn_play,btn_pause,btn_stop,btn_low,btn_height;
privateSurfaceViewmSurfaceView;
/*播放视频对象*/
privateMediaPlayermediaPlayer;
/*系统声音*/
privateAudioManageraudioManager;
/*播放位置*/
privateintposition;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setWindow();
setContentView(R.layout.activity_main);
findViews();
setListeners();
mediaPlayer=newMediaPlayer();
setSurfaceView();
}
//横竖屏切换时的处理
@Override
protectedvoidonSaveInstanceState(BundleoutState){
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
outState.putInt("position",mediaPlayer.getCurrentPosition());
}
super.onSaveInstanceState(outState);
}
//横竖屏切换后的处理
@Override
protectedvoidonRestoreInstanceState(BundlesavedInstanceState){
if(savedInstanceState.containsKey("position")){
position=savedInstanceState.getInt("position");
}
super.onRestoreInstanceState(savedInstanceState);
}
/*实例化UI*/
privatevoidfindViews(){
btn_play=(Button)findViewById(R.id.btn1);
btn_pause=(Button)findViewById(R.id.btn2);
btn_stop=(Button)findViewById(R.id.btn3);
btn_low=(Button)findViewById(R.id.btn4);
btn_height=(Button)findViewById(R.id.btn5);
mSurfaceView=(SurfaceView)findViewById(R.id.surfaceVIew);
audioManager=(AudioManager)getSystemService(AUDIO_SERVICE);
}
/*为5个按钮设置监听*/
privatevoidsetListeners(){
btn_play.setOnClickListener(onClickListener);
btn_pause.setOnClickListener(onClickListener);
btn_stop.setOnClickListener(onClickListener);
btn_low.setOnClickListener(onClickListener);
btn_height.setOnClickListener(onClickListener);
}
/*屏幕为全屏、无标题*/
privatevoidsetWindow(){
requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题
////设置窗体始终点亮
//getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
//WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
////设置窗体背景模糊
//getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
//设置窗体全屏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
/*播放视频*/
privatevoidplayMedia(){
/*初始化状态*/
mediaPlayer.reset();
/*设置声音流类型*/
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
/*设置mp3\mp4加载路径*/
Filefile=newFile(Environment.getExternalStorageDirectory(),"sv.3gp");
try{
mediaPlayer.setDataSource(file.getAbsolutePath());
//缓冲
mediaPlayer.prepare();
//开始播放
mediaPlayer.start();
//具体位置
Log.i("position",position+"------");
mediaPlayer.seekTo(position);
//视频输出到View
mediaPlayer.setDisplay(mSurfaceView.getHolder());
//重置位置为0
position=0;
}catch(IllegalArgumentExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IllegalStateExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/*设置surfaceView视图*/
privatevoidsetSurfaceView(){
//createsa"push"surface
mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//设置事件,回调函数
mSurfaceView.getHolder().addCallback(newSurfaceHolder.Callback(){
/*SurfaceView创建时*/
@Override
publicvoidsurfaceCreated(SurfaceHolderholder){
if(position>0){
playMedia();
position=0;
}
}
@Override
publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){
//TODOAuto-generatedmethodstub
}
/*SurfaceView销毁视图*/
@Override
publicvoidsurfaceDestroyed(SurfaceHolderholder){
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
/*Activity销毁时停止播放,释放资源。不做这个操作,即使退出,还是能听到视频的声音*/
mediaPlayer.release();
}
});
}
//设置5个按钮的监听事件
privateOnClickListeneronClickListener=newOnClickListener(){
@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.btn1://播放
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
return;
}else{
playMedia();
}
break;
caseR.id.btn2://暂停
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
position=mediaPlayer.getCurrentPosition();
mediaPlayer.pause();
}else{
return;
}
break;
caseR.id.btn3://停止
if(mediaPlayer!=null&&mediaPlayer.isPlaying()){
mediaPlayer.stop();
position=0;
}else{
return;
}
break;
caseR.id.btn4://调小音量
//获取当前的音乐音量
intvolume=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
Log.v("Volume","volume"+volume);
//音量>0
if(volume>0){
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,0);
}else{
return;
}
break;
caseR.id.btn5://调大音量
volume=audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
//音量<100
if(volume<audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)){
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,0);
}else{
return;
}
break;
}
}
};
}
--------------------------------------------效果----------------------------------------------------
<!--EndFragment-->
更多相关文章
- Catalog Service - 解析微软微服务架构实例代码
- 介绍一个微软开源项目网站--CodePlex
- 具体分析微软的xml解析器
- 继 GitHub 后微软又收购了 npm
- 想来微软实习吗?
- 尝鲜!微软首个AI量化投资开源平台Qlib上手体验!
- 10% + 10% = 0.11 ?是 bug 还是 feature ?微软开源的计算器项目告
- 大新闻!Python 之父重新出山,加入微软开发部
- GitHub 热门:微软新开源的 Python 静态类型检查器