安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)
来源:互联网 发布:java怎么解决高并发 编辑:程序博客网 时间:2024/05/02 04:35
本文为原创,转载请说明出处,谢谢~
界面比较简单,就是弹出一个自定义的对话框,对话框中自动播放视频,播放完毕后对话框消失,跟一些视频广告比较相似。
自定义对话框代码,其中重写了findViewById函数和写了getDialogView函数来获取dialog中的自定义控件
public class VideoPlayDialog extends Dialog { Context context; private View dialogView; public VideoPlayDialog(Context context) { super(context); this.context = context; } public VideoPlayDialog(Context context, int theme){ super(context, theme); this.context = context; LayoutInflater inflater= LayoutInflater.from(context); dialogView = inflater.inflate(R.layout.videoplaydialog, null); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(dialogView); } @Override public View findViewById(int id) { //重写findViewById方法获取对话框中控件 return super.findViewById(id); } public View getDialogView() { //获得对话框view return dialogView; }}
下面是自定义dialog的布局,只放了一个surfaceview播放视频
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <SurfaceViewandroid:id="@+id/surfaceView"android:layout_width="match_parent" android:layout_height="360dp"/> </RelativeLayout>
下面是对话框的style,其中最后一个item是为了保证弹出对话框后不变暗
<style name="MyDialog" parent="@android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">false</item> <!--activity不变暗--> </style>
主界面布局是一个播放的按钮,就不贴出来了。下面是主要调用dialog的代码,注释得比较清楚了哈~
public class VideoPlayTestActivity extends Activity{private Button button_show;private SurfaceView surfaceView;private MediaPlayer mPlayer;private SurfaceHolder surfaceHolder;private VideoPlayDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.videoplaytest);button_show = (Button)findViewById(R.id.showVideo);button_show.setOnClickListener(new OnClickListener() { <span style="white-space:pre"></span>@Override <span style="white-space:pre"></span>public void onClick(View v) { <span style="white-space:pre"></span>dialog = new VideoPlayDialog(VideoPlayTestActivity.this, <span style="white-space:pre"></span>R.style.MyDialog);//新建对话框 <span style="white-space:pre"></span>dialog.setCanceledOnTouchOutside(true); <span style="white-space:pre"></span>//获取dialog中的控件 <span style="white-space:pre"></span>View view = dialog.getDialogView(); <span style="white-space:pre"></span>surfaceView = (SurfaceView) view.findViewById(R.id.surfaceView); <span style="white-space:pre"></span>playVideo("/mnt/sdcard/Download/video.mp4"); <span style="white-space:pre"></span>dialog.show(); <span style="white-space:pre"></span>} <span style="white-space:pre"></span> <span style="white-space:pre"></span>});}private void playVideo(String videoFileLocation){// 创建MediaPlayermPlayer = new MediaPlayer();surfaceHolder = surfaceView.getHolder();// 设置播放时打开屏幕surfaceHolder.setKeepScreenOn(true);surfaceHolder.addCallback(new SurfaceListener());mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);// 设置需要播放的视频try{mPlayer.setDataSource(videoFileLocation);}catch (IllegalArgumentException e1){e1.printStackTrace();}catch (SecurityException e1){e1.printStackTrace();}catch (IllegalStateException e1){e1.printStackTrace();}catch (IOException e1){e1.printStackTrace();}try{mPlayer.prepare();}catch (IllegalStateException e1){e1.printStackTrace();}catch (IOException e1){e1.printStackTrace();}//等待surfaceHolder初始化完成才能执行mPlayer.setDisplay(surfaceHolder)mPlayer.setOnPreparedListener(new OnPreparedListener() { <span style="white-space:pre"></span>@Override <span style="white-space:pre"></span>public void onPrepared(MediaPlayer mp) { <span style="white-space:pre"></span>// 把视频画面输出到SurfaceView <span style="white-space:pre"></span>mPlayer.setDisplay(surfaceHolder); <span style="white-space:pre"></span>mPlayer.start(); <span style="white-space:pre"></span>} <span style="white-space:pre"></span>});//视频播放完成后的操作mPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp){if(mPlayer!=null)mPlayer.release();//重置mediaplayer等待下一次播放if(dialog.isShowing())dialog.dismiss(); //关闭对话框}});}private class SurfaceListener implements SurfaceHolder.Callback{@Overridepublic void surfaceChanged(SurfaceHolder holder, int format,int width, int height){}@Overridepublic void surfaceCreated(SurfaceHolder holder){}@Overridepublic void surfaceDestroyed(SurfaceHolder holder){}}@Overrideprotected void onDestroy(){// 停止播放if (mPlayer.isPlaying()) mPlayer.stop();// 释放资源mPlayer.release();super.onDestroy();}}
Demo下载地址:http://download.csdn.net/detail/colourfulcloud/7701507
0 0
- 安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)
- 安卓使用MediaPlayer和SurfaceView播放视频
- 安卓本地视频播放SurfaceView+MediaPlayer
- android surfaceView+mediaPlayer 自定义视频播放器
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView播放视频
- Android:使用MediaPlayer和SurfaceView播放视频
- 使用MediaPlayer和SurfaceView结合播放视频
- 使用MediaPlayer和SurfaceView播放视频
- 使用SurfaceView和MediaPlayer播放视频
- eclipse导入项目之后出现红色叹号的解决办法
- C语言里sscanf函数的正则表达式
- org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject
- JSTL <fmt>Date、Number格式化显示
- hd 1048 The Hardest Problem Ever
- 安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)
- SQL join连接
- java设计模式之代理模式(8)
- 云计算技术解析 Amazon EC2 的幕后
- boost
- 【6 Weeks。一个肚子两个大。】
- 模拟鼠标的单双击
- hdu 大菲波数
- KM算法(最优匹配)