1.案例一

布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent"    android:layout_height="fill_parent" android:weightSum="1">    <SurfaceView android:layout_height="220dip" android:layout_gravity="center" android:id="@+id/surface" android:layout_weight="0.25" android:layout_width="320dip"></SurfaceView>    <LinearLayout android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:layout_width="fill_parent">        <Button android:text="播放" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>        <Button android:text="暂停" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>        <Button android:text="停止" android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>    </LinearLayout></LinearLayout>


主程序:
public class SurfaceActivity extends Activity implements SurfaceHolder.Callback {    /** Called when the activity is first created. */    MediaPlayer player;    SurfaceView surface;    SurfaceHolder surfaceHolder;    Button play,pause,stop;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        play=(Button)findViewById(R.id.button1);        pause=(Button)findViewById(R.id.button2);        stop=(Button)findViewById(R.id.button3);        surface=(SurfaceView)findViewById(R.id.surface);         surfaceHolder=surface.getHolder();  //SurfaceHolder是SurfaceView的控制接口        surfaceHolder.addCallback(this);   //因为这个类实现了SurfaceHolder.Callback接口,所以回调参数直接this        surfaceHolder.setFixedSize(320, 220);  //显示的分辨率,不设置为视频默认        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  //Surface类型         play.setOnClickListener(new OnClickListener(){             @Override            public void onClick(View v) {                player.start();            }});        pause.setOnClickListener(new OnClickListener(){            @Override            public void onClick(View v) {                player.pause();            }});        stop.setOnClickListener(new OnClickListener(){             @Override            public void onClick(View v) {                player.stop();            }});    }     @Override    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {    }     @Override    public void surfaceCreated(SurfaceHolder arg0) {//必须在surface创建后才能初始化MediaPlayer,否则不会显示图像        player=new MediaPlayer();        player.setAudioStreamType(AudioManager.STREAM_MUSIC);        player.setDisplay(surfaceHolder);        //设置显示视频显示在SurfaceView上            try {                player.setDataSource("/sdcard/3.mp4");                player.prepare();            } catch (Exception e) {                e.printStackTrace();            }    }     @Override    public void surfaceDestroyed(SurfaceHolder arg0) {        // TODO Auto-generated method stub     }     @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        if(player.isPlaying()){        player.stop();        }        player.release();        //Activity销毁时停止播放,释放资源。不做这个操作,即使退出还是能听到视频播放的声音    }}



2.案例二

布局文件main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#ffffff"    ><TextView      android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="@string/filename"    /><EditText android:layout_width="fill_parent"     android:layout_height="wrap_content"      android:text="oppo.mp4"    android:id="@+id/filename"    /><LinearLayout     android:orientation="horizontal"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    >    <ImageButton  android:layout_width="wrap_content"    android:layout_height="fill_parent"        android:src="@drawable/play"        android:id="@+id/play"    />    <ImageButton  android:layout_width="wrap_content"    android:layout_height="fill_parent"        android:src="@drawable/pause"        android:id="@+id/pause"    />    <ImageButton  android:layout_width="wrap_content"    android:layout_height="fill_parent"        android:src="@drawable/stop"        android:id="@+id/stop"    />    <ImageButton  android:layout_width="wrap_content"    android:layout_height="fill_parent"        android:src="@drawable/reset"        android:id="@+id/reset"    /></LinearLayout> <SurfaceView android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:id="@+id/surfaceview"    /></LinearLayout>

主程序VodeoPlayActivity.java
public class VodeoPlayActivity extends Activity {    /** Called when the activity is first created. */    private EditText filenamEditText;    private MediaPlayer mediaPlayer;    private String filename;    private SurfaceView surfaceView;    private final static String TAG="VodeoPlayActivity";    private int prosition=0;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        filenamEditText=(EditText) this.findViewById(R.id.filename);        surfaceView=(SurfaceView)this.findViewById(R.id.surfaceview);        surfaceView.getHolder().setFixedSize(176, 144);//设置分辨率        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置surfaceview不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前        surfaceView.getHolder().addCallback(new SurceCallBack());//对surface对象的状态进行监听        mediaPlayer=new MediaPlayer();                ButtonOnClikListiner buttonOnClikListinero=new ButtonOnClikListiner();        ImageButton start=(ImageButton) this.findViewById(R.id.play);        ImageButton pause=(ImageButton) this.findViewById(R.id.pause);        ImageButton stop=(ImageButton) this.findViewById(R.id.stop);        ImageButton replay=(ImageButton) this.findViewById(R.id.reset);        start.setOnClickListener(buttonOnClikListinero);        pause.setOnClickListener(buttonOnClikListinero);        stop.setOnClickListener(buttonOnClikListinero);        replay.setOnClickListener(buttonOnClikListinero);    }        private final class ButtonOnClikListiner implements View.OnClickListener{        @Override        public void onClick(View v) {            if(Environment.getExternalStorageState()==Environment.MEDIA_UNMOUNTED){                Toast.makeText(VodeoPlayActivity.this, "sd卡不存在", Toast.LENGTH_SHORT).show();                return;            }            filename=filenamEditText.getText().toString();            switch (v.getId()) {            case R.id.play:                play();                break;            case R.id.pause:                if(mediaPlayer.isPlaying()){                    mediaPlayer.pause();                }else{                    mediaPlayer.start();                }                break;            case R.id.reset:                if(mediaPlayer.isPlaying()){                    mediaPlayer.seekTo(0);                }else{                    play();                }                break;            case R.id.stop:                if(mediaPlayer.isPlaying()){                    mediaPlayer.stop();                }                break;            }        }      }        private void play() {        try {                File file=new File(Environment.getExternalStorageDirectory(),filename);                mediaPlayer.reset();//重置为初始状态                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置音乐流的类型                mediaPlayer.setDisplay(surfaceView.getHolder());//设置video影片以surfaceviewholder播放                mediaPlayer.setDataSource(file.getAbsolutePath());//设置路径                mediaPlayer.prepare();//缓冲                mediaPlayer.start();//播放            } catch (Exception e) {                Log.e(TAG, e.toString());                e.printStackTrace();            }    }        private final class SurceCallBack implements SurfaceHolder.Callback{        /**         * 画面修改         */        @Override        public void surfaceChanged(SurfaceHolder holder, int format, int width,                int height) {            // TODO Auto-generated method stub                    }        /**         * 画面创建         */        @Override        public void surfaceCreated(SurfaceHolder holder) {            if(prosition>0&&filename!=null){                play();                mediaPlayer.seekTo(prosition);                prosition=0;            }                    }        /**         * 画面销毁         */        @Override        public void surfaceDestroyed(SurfaceHolder holder) {            if(mediaPlayer.isPlaying()){                prosition=mediaPlayer.getCurrentPosition();                mediaPlayer.stop();            }        }    }}

更多相关文章

  1. Android(安卓)分割线
  2. service的隐式启动和显示启动
  3. Android(安卓)修改WiFi热点的默认SSID和密码
  4. Android权限【大全】
  5. Mono for Android(安卓)显示远程图片
  6. Android(安卓)ListView设置Item选中状态
  7. Android之SurfaceView实现视频播放
  8. Android点击左右按钮实现左右滑动页面切换
  9. Android(安卓)实现仿Window7图片预览窗格效果

随机推荐

  1. java对XML文件的解析、节点的增加、删除
  2. PHP实现爬虫爬取图片代码实例
  3. 传智播客java web 过滤器
  4. 【python】字符串输出和输入
  5. 新手衣服怎么绘画?板绘画衣服教程!
  6. 如何学手绘插画?零基础学手绘动漫技巧!
  7. iOS调试Block引用对象无法被释放的小技巧
  8. 深入垂直业务场景,SaaS版供应商业务协同平
  9. 淘宝移动端首页的商品列表
  10. 淘宝移动端首页的商品列表