如何将本地externalStorageDirectory(不是从互联网链接)的所有视频路径嵌入到RecyclerView中,并在单击playButton时播放它。 我尝试过,但没有显示一些东西并玩。谢谢大家。 这里是我的代码:播放本地视频Android
@Override
public VideoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
return new VideoViewHolder(view);
}
@Override
public void onBindViewHolder(VideoViewHolder holder, int position) {
holder.videoUrl = videos.get(position);
holder.imageLoaderProgressBar.setVisibility(View.INVISIBLE);
holder.videoImageView.setVisibility(View.VISIBLE);
}
@Override
public void onViewRecycled(VideoViewHolder holder) {
if (holder == currentVideoViewHolder) {
holder.stopVideo();
}
holder.videoView.stopPlayback();
super.onViewRecycled(holder);
}
@Override
public int getItemCount() {
return videos.size();
}
VideoViewHolder currentVideoViewHolder;
public void onScrolled(RecyclerView recyclerView) {
if (currentVideoViewHolder != null) {
currentVideoViewHolder.onScrolled(recyclerView);
}
}
class VideoViewHolder extends RecyclerView.ViewHolder {
//find R.id.controls for each controls. : button, progressbar, videoview.
String videopath;
public String getVideoUrl() {
return videopath;
}
public VideoViewHolder(View view) {
super(view);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
int width = mp.getVideoWidth();
int height = mp.getVideoHeight();
videoView.setIsPrepared(true);
UIUtils.resizeView(videoView, UIUtils.getScreenWidth(getActivity()), UIUtils.getScreenWidth(getActivity()) * height/width);
if (currentVideoViewHolder == VideoViewHolder.this) {
videoImageView.setVisibility(View.GONE);
imageLoaderProgressBar.setVisibility(View.INVISIBLE);
videoView.setVisibility(View.VISIBLE);
videoView.seekTo(0);
videoView.start();
}
}
});
videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
return false;
}
});
videoPlayImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentVideoViewHolder != null) {
currentVideoViewHolder.videoView.pause();
if (currentVideoViewHolder.videoView.getVisibility() == View.VISIBLE) currentVideoViewHolder.videoView.setVisibility(View.INVISIBLE);
currentVideoViewHolder = null;
}
currentVideoViewHolder = VideoViewHolder.this;
if (!getVideoUrl().equals(videoView.getVideoPath())) {
videoView.setIsPrepared(false);
videoView.setVideoPath(getVideoUrl());
videoView.requestFocus();
} else {
if (videoView.isPrepared()) {
imageLoaderProgressBar.setVisibility(View.INVISIBLE);
} else {
imageLoaderProgressBar.setVisibility(View.VISIBLE);
}
videoView.requestFocus();
videoView.seekTo(0);
videoView.start();
}
}
});
}
public void stopVideo() {
videoView.pause();
}
public void onScrolled(RecyclerView recyclerView) {
if (isViewNotVisible(videoPlayImageButton, recyclerView)) {
stopVideo();
}
}
public boolean isViewNotVisible(View view, RecyclerView recyclerView) {
Rect scrollBounds = new Rect();
recyclerView.getHitRect(scrollBounds);
return view.getVisibility() == View.VISIBLE;
}
}
让我们看看您的代码 –
@SurajMakhija:我发布了关于AdapterRecyclerView的代码。 –