Android列表嵌入视频播放

最近在写一个和视频有关的项目,遇到了这个问题,开始使用ListView中嵌入MediaPlayer和TextureView老是出问题,播放的时候item会出现错乱的现象,原因在于使用ViewHolder复用View导致的,如果每次都重新加载View就不会出问题了,这个demo中没有使用ListView,使用了android.support.v7.widget.RecyclerView,达到了预期的目的,希望对正在迷茫中的你有所帮助。

在一个列表视频交流群( 290087364)中找到了一个Demo,然后在此基础上进行了修改,感谢群主的无私贡献,我也不能太自私了,就贴出来,希望能抛砖引玉,给大家带来一点的帮助。

首先看一下,重写的一个TextureView,代码中没有注释,代码量比较少,很容易理解,TextureVideoView主要用于控制视频的播放。

package com.example.textureviewdemo;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnInfoListener;
import android.util.AttributeSet;
import android.view.Surface;
import android.view.TextureView;
import android.view.TextureView.SurfaceTextureListener;
@SuppressLint("NewApi") 
public class TextureVideoView extends TextureView implements SurfaceTextureListener  {
	
	private MediaPlayer mediaPlayer;
	private Context context;
	MediaState mediaState;
	public MediaPlayer getMediaPlayer() {
		return mediaPlayer;
	}

	public interface OnStateChangeListener{
		public void onSurfaceTextureDestroyed(SurfaceTexture surface);
		public void onBuffering();
		public void onPlaying();
		public void onSeek(int max,int progress);
		public void onStop();
	}
	OnStateChangeListener onStateChangeListener;
	public void setOnStateChangeListener(OnStateChangeListener onStateChangeListener) {
		this.onStateChangeListener = onStateChangeListener;
	}
	
	//监听视频的缓冲状态
	private OnInfoListener onInfoListener=new OnInfoListener() {
		@Override
		public boolean onInfo(MediaPlayer mp, int what, int extra) {
			if(onStateChangeListener!=null)
			{
				onStateChangeListener.onPlaying();
				if(what==MediaPlayer.MEDIA_INFO_BUFFERING_START)
				{
					onStateChangeListener.onBuffering();
				}else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
					onStateChangeListener.onPlaying();
				} 
			}
			retu
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值