Android播放网页视频以及帧动画

首先要用SurfaceView就要自定义一个SurfaceView

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{

    private SurfaceHolder holder;
    private String[] runs;
    private Context context;

    public MySurfaceView(Context context) {
        super(context);
        init(context);
    }


    public MySurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    /**
     * 初始化
     * @param context
     */
    private void init(Context context) {
        this.context = context;
        WindowManager mWindows = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        this.width = mWindows.getDefaultDisplay().getWidth();

        holder = getHolder();
        holder.addCallback(this);
        try {
            runs = context.getAssets().list("run");
            for (String run: runs) {
                Log.i("run",run.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    boolean isDraw = true;

    private float step = 10f;
    private float locationX = 0;
    private int width;
    private boolean isRight = true;

    Thread thread = new Thread(){
        @Override
        public void run() {
            Paint paint = new Paint();
            paint.setColor(Color.WHITE);
            paint.setAntiAlias(true);
            paint.setTextSize(100);
            int i = 0;
            //这里我用无线循环来展示一个帧动画播放的效果
            while (isDraw){
                Canvas canvas = holder.lockCanvas();
                String run = runs[i%runs.length];
                try {
                    InputStream open = context.getAssets().open("run" + "/" + run);
                    Bitmap bitmap = BitmapFactory.decodeStream(open);
                    i++;
                    Log.i("width",String.valueOf(width));
                    Log.i("locationX",String.valueOf(locationX));

                    if(isRight){
                        locationX+=step;
                    }else{
                        locationX-=step;
                    }
                    if(locationX>width){
                        isRight=false;
                    }else if(locationX<=0){
                        isRight=true;
                    }
                    canvas.drawBitmap(bitmap,locationX,300,paint);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                holder.unlockCanvasAndPost(canvas);
            }
        }
    };


    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        thread.start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        isDraw=false;
    }
}
对于VideoView来说,使用就像一般的Api一样了
如何使用?
    1、获取VideoView主件
    2、设置资源来源
        1、setVideoPath(String path)
        2、setVideoUri(Uri uri)
        3、setVideoUri(Uri uri, Map<String, String> headers)
    3、添加视频控制器 MediaController (可选)
    setMediaController(MediaController controller)
    4、调用VideoView.start() 播放视频
2、设置资源来源
    1、setVideoPath(String path)
    2、setVideoUri(Uri uri)
    3、setVideoUri(Uri uri, Map<String, String> headers)
3、添加视频控制器 MediaController (可选)
    setMediaController(MediaController controller)
4、调用VideoView.start() 播放视频
Video 操作
    start() 播放
    pause() 暂停
    seekTo(int msec) 设置播放位置
    stopPlayback() 停止视频播放
    suspend()    停止播放视频 不清空目标状态
Video 监听
    setOnPreparedListener(MediaPlayer.OnPreparedListener l)  
当视频准备后回调的监听
    setOnCompletionListener(MediaPlayer.OnCompletionListener l)
当视频播放完成时调用的监听
    setOnErrorListener(MediaPlayer.OnErrorListener l)
当视频播放出现异常时调用的监听
    setOnInfoListener(MediaPlayer.OnInfoListener l)
当出现关于播放媒体的特定信息需要发出警告时,将调用此方法 
method
    Video 操作
        start() 播放
        pause() 暂停
        seekTo(int msec) 设置播放位置
        stopPlayback() 停止视频播放
        suspend()    停止播放视频 不清空目标状态
    Video 监听
        setOnPreparedListener(MediaPlayer.OnPreparedListener l)  
当视频准备后回调的监听
        setOnCompletionListener(MediaPlayer.OnCompletionListener l)
当视频播放完成时调用的监听
        setOnErrorListener(MediaPlayer.OnErrorListener l)
当视频播放出现异常时调用的监听
        setOnInfoListener(MediaPlayer.OnInfoListener l)
当出现关于播放媒体的特定信息需要发出警告时,将调用此方法 
    Video 信息
        getDuration()
获取视频总长
        getCurrentPosition()
获取目前播放的位置
        getBufferPercentage()
获取VideoView 获取的缓冲完成百分比
        getAudioSessionId()
获取音频效果应用到视频的音轨
    Video 判断
        isPlaying() 是否播放中
        canPause() 是否可暂停
        canSeekBackward() 是否可后退
        canSeekForward()是否可前进
Video 信息
    getDuration()
获取视频总长
    getCurrentPosition()
获取目前播放的位置
    getBufferPercentage()
获取VideoView 获取的缓冲完成百分比
    getAudioSessionId()
获取音频效果应用到视频的音轨
Video 判断
    isPlaying() 是否播放中
    canPause() 是否可暂停
    canSeekBackward() 是否可后退
    canSeekForward()是否可前进


你可能感兴趣的:(视频播放,帧动画)