使用SurfaceView,游戏或者视频的画面使用在SurfaceView,其他的时候很少使用这个
SurfaceView:
具有双缓冲技术,适用于实时刷新较高的场景,比如游戏和视频。
重量级组件,占用资源较多,只要不可见就不会创建,可见的时候才会创建。
只要可见就会创建,只要不可见的时候就会销毁
activity_main.xml
<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" >
<SurfaceView
android:id="@+id/sv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
MainActivity.java
package com.ldw.video;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MainActivity extends Activity {
private MediaPlayer player;
int cunnrentPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView sv = (SurfaceView) findViewById(R.id.sv);
//拿到surfaceViewe的控制器
final SurfaceHolder sh = sv.getHolder();
//通过回掉函数实现surfaceview的监听
sh.addCallback(new Callback(){
//surfaceview创建的时候调用,创建的时候采取播放视频
@Override
public void surfaceCreated(SurfaceHolder holder) {
if(player == null){
player = new MediaPlayer();
player.reset();
try {
player.setDataSource("sdcard/1.3gp");
player.setDisplay(sh);
player.prepare();
player.start();
player.seekTo(cunnrentPosition);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//surfaceview结构改变的的时候调用
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
//surfaceview销毁的时候调用
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//每次surfaceView销毁的时候,同时停止视频
if(player != null){
cunnrentPosition = player.getCurrentPosition();
player.stop();
player.release();
player = null;
}
}
});
}
}