android视频动画,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 headers)

3、添加视频控制器 MediaController (可选)

setMediaController(MediaController controller)

4、调用VideoView.start() 播放视频

2、设置资源来源

1、setVideoPath(String path)

2、setVideoUri(Uri uri)

3、setVideoUri(Uri uri, Map 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()是否可前进

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值