Android 如何在Recyclerview中屏蔽视频,只关注当前正在播放的视频,如FACEBOOK
大家好,我正在尝试制作一个流媒体视频列表,我想在将Android 如何在Recyclerview中屏蔽视频,只关注当前正在播放的视频,如FACEBOOK,android,xml,android-recyclerview,video-streaming,Android,Xml,Android Recyclerview,Video Streaming,大家好,我正在尝试制作一个流媒体视频列表,我想在将Recyclerview滚动到中心时自动播放聚焦视频。我已经这样做了,但我想删除列表中的其他元素,以便像Facebook一样将注意力集中在当前播放的视频上,有什么办法吗?? 这是我的ViewHolder import android.graphics.drawable.ColorDrawable; import android.media.MediaPlayer; import android.support.v4.view.ViewCompat
Recyclerview
滚动到中心时自动播放聚焦视频。我已经这样做了,但我想删除列表中的其他元素,以便像Facebook一样将注意力集中在当前播放的视频上,有什么办法吗??
这是我的ViewHolder
import android.graphics.drawable.ColorDrawable;
import android.media.MediaPlayer;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListener;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.arapeak.hasry.hasrynewsapp.target.VideoLoadTarget;
import com.arapeak.hasry.hasrynewsapp.target.VideoProgressTarget;
import com.bumptech.glide.Glide;
import com.bumptech.glide.gifdecoder.GifHeader;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.model.GlideUrl;
import com.mikhaellopez.circularprogressbar.CircularProgressBar;
import com.waynell.videolist.visibility.items.ListItem;
import com.waynell.videolist.widget.TextureVideoView;
import java.io.File;
import java.io.InputStream;
import butterknife.Bind;
import butterknife.OnClick;
public class VideoViewHolder extends BaseViewHolder<VideoItem>
implements VideoLoadMvpView, ViewPropertyAnimatorListener, ListItem {
@Bind(R.id.video_view)
public TextureVideoView videoView;
@Bind(R.id.addToFav)
public TextView addToFav;
@Bind(R.id.shareVideo)
public TextView shareVideo ;
@Bind(R.id.video_text)
public TextView videoTitle;
@Bind(R.id.video_cover)
public ImageView videoCover;
@Bind(R.id.video_progress)
public CircularProgressBar progressBar;
private int videoState = STATE_IDLE;
private String videoLocalPath;
private final VideoProgressTarget progressTarget;
private final VideoLoadTarget videoTarget;
private static final int STATE_IDLE = 0;
private static final int STATE_ACTIVED = 1;
private static final int STATE_DEACTIVED = 2;
private static final String TAG = "ListItem";
private static final boolean SHOW_LOGS = BuildConfig.DEBUG;
private int stopPosition;
public VideoViewHolder(View view) {
super(view);
videoView.setAlpha(0);
videoTarget = new VideoLoadTarget(this);
progressTarget = new VideoProgressTarget(videoTarget, progressBar);
shareVideo.setVisibility(View.GONE);
addToFav.setVisibility(View.GONE);
}
@OnClick(R.id.video_view)
void cliclVideoView() {
if (videoView.isPlaying()) {
// videoView.mute();
videoView.pause();
shareVideo.setVisibility(View.VISIBLE);
addToFav.setVisibility(View.VISIBLE);
// videoCover.setAlpha(1.f);
// videoCover.setVisibility(View.VISIBLE);
return;
}
else {
videoView.resume();
videoTitle.setVisibility(View.GONE);
shareVideo.setVisibility(View.GONE);
addToFav.setVisibility(View.GONE);
videoCover.setAlpha(1.f);
videoCover.setVisibility(View.GONE);
}
}
private void reset() {
videoState = STATE_IDLE;
videoView.stop();
videoLocalPath = null;
videoStopped();
}
@Override
public void onBind(int position, VideoItem item) {
reset();
videoTitle.setText(item.getmVideoTitle());
progressTarget.setModel(item.getVideoUrl());
// load video cover photo
Glide.with(itemView.getContext())
.load(item.getCoverUrl())
.placeholder(new ColorDrawable(0xffdcdcdc))
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(videoCover);
// load video file
Glide.with(itemView.getContext())
.using(VideoListGlideModule.getOkHttpUrlLoader(), InputStream.class)
.load(new GlideUrl(item.getVideoUrl()))
.as(File.class)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(progressTarget);
}
private void cancelAlphaAnimate(View v) {
ViewCompat.animate(v).cancel();
}
private void startAlphaAnimate(View v) {
ViewCompat.animate(v).setListener(this).alpha(0f);
}
@Override
public TextureVideoView getVideoView() {
return videoView;
}
@Override
public void videoBeginning() {
videoView.setAlpha(1.f);
cancelAlphaAnimate(videoCover);
startAlphaAnimate(videoCover);
}
@Override
public void videoStopped() {
cancelAlphaAnimate(videoCover);
videoView.setAlpha(0);
videoCover.setAlpha(1.f);
videoCover.setVisibility(View.VISIBLE);
}
@Override
public void videoPrepared(MediaPlayer player) {
}
@Override
public void videoResourceReady(String videoPath) {
videoLocalPath = videoPath;
if(videoLocalPath != null) {
videoView.setVideoPath(videoPath);
if(videoState == STATE_ACTIVED) {
videoView.start();
}
}
}
@Override
public void setActive(View newActiveView, int newActiveViewPosition) {
if (SHOW_LOGS) {
Log.i(TAG, "setActive " + newActiveViewPosition + " path " + videoLocalPath);
}
videoState = STATE_ACTIVED;
if (videoLocalPath != null) {
videoView.setVideoPath(videoLocalPath);
videoView.start();
}
}
@Override
public void deactivate(View currentView, int position) {
if(SHOW_LOGS) {
Log.w(TAG, "deactivate " + position);
}
videoState = STATE_DEACTIVED;
videoView.stop();
videoStopped();
}
@Override
public void onAnimationStart(View view) {
}
@Override
public void onAnimationEnd(View view) {
view.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(View view) {
}
}
需要帮忙吗 第一个/最后一个可见子项取决于LayoutManager。如果您使用的是LinearLayoutManager,则可以使用
int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();
LinearLayoutManager,第一个/最后一个取决于适配器顺序。不要从RecyclerView查询子项;对于缓存,LayoutManager可能更喜欢布局比可见项更多的项
希望我能帮到你。我正在使用LayoutManager,但我不知道如何使整个过程中的灯罩回收视图,我不知道该制作什么灯罩以及将其放置在哪里??你的物品\u视频\u布局`主布局相对灯罩背景和包装内容(高度),在relativeLayout中添加包含视频和其他视图的布局…我已经这样做了,您能给我提供代码示例来更好地理解它吗??
int findFirstVisibleItemPosition();
int findFirstCompletelyVisibleItemPosition();
int findLastVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();