安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用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