Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Recyclerview中屏蔽视频,只关注当前正在播放的视频,如FACEBOOK_Android_Xml_Android Recyclerview_Video Streaming - Fatal编程技术网

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();