滑动 ViewPager2 时如何暂停 exoplayer?

如何解决滑动 ViewPager2 时如何暂停 exoplayer?

我正在将 viewpager2 与 exoplayer、视频(来自 firebase)一起使用。当我在视频中滑动时,视频会继续播放,我必须通过再次滑动到正在播放的视频并单击 exoplayer 暂停按钮来自己停止播放。我希望在我滑动 viewpager2 时视频自动停止。

如何停止视频刷卡?顺便说一句,我对一般的编码甚至在这个网站上都非常陌生,所以我希望得到帮助而不是打扰任何人。

这是我正在实现 viewpager2 的类:

public class Dashboard extends AppCompatActivity {
    private static final String TAG = "Dashboard";
    private static final int ACTIVITY_NUM = 0;
    private static final int CAMERA_PERMISSION_REQUEST_CODE = 88888;
    private Context xContext = Dashboard.this;

    int likescount;
    DatabaseReference likesref;

    //uis


    ViewPager2 viewPager2;


    FirebaseUser firebaseUser;

    boolean flag = false;

    DatabaseReference likesrefernce = FirebaseDatabase.getInstance().getReference("likes");

    Boolean likechecker = false;

    String profileid;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dashboard);
        Log.d(TAG,"onCreate: started.");

                    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        if (firebaseUser != null) {
            firebaseUser.getUid();
        }




        setupBottomNavigationView();
        // getSupportActionBar().setTitle("Videos");


        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        viewPager2 = (ViewPager2) findViewById(R.id.vpager);

    }



            FirebaseRecyclerOptions<video> options =
                    new FirebaseRecyclerOptions.Builder<video>()
                            .setQuery(FirebaseDatabase.getInstance().getReference("video"),video.class)
                            .build();
            FirebaseRecyclerAdapter<video,ViewHolder> firebaseRecyclerAdapter =
                    new FirebaseRecyclerAdapter<video,ViewHolder>(options) {
                        @Override
                        protected void onBindViewHolder(@NonNull ViewHolder holder,int position,@NonNull video member) {

                            SharedPreferences prefs = xContext.getSharedPreferences("PREFS",MODE_PRIVATE);
                            profileid = prefs.getString("profileid","none");

                            holder.setExoplayer(getApplication(),member.getName(),member.getVideourl());
                            FirebaseUser user1 = FirebaseAuth.getInstance().getCurrentUser();
                            assert user1 != null;
                            String currentUserId = user1.getUid();
                            String userId = user1.getUid();
                            final String i = getRef(position).getKey();
                            final String publisher = getRef(position).getKey();

                            DatabaseReference reference3 = FirebaseDatabase.getInstance().getReference("Users").child(member.getPublisher());
                            reference3.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                    if (getApplicationContext() == null) {
                                        return;
                                    }
                                    User user3 = dataSnapshot.getValue(User.class);

                                    Glide.with(getApplicationContext()).load(user3 != null ? user3.getImageurl() : null).into(holder.image_profile);
                                    holder.username.setText(user3 != null ? user3.getUsername() : null);

                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {

                                }
                            });


                            likesref = FirebaseDatabase.getInstance().getReference("likes");



                            String likes = "likes";

                            likesref.addValueEventListener(new ValueEventListener() {
                                @Override
                                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                                    if (dataSnapshot.child(i).hasChild(userId)) {
                                        likescount = (int) dataSnapshot.child(i).getChildrenCount();
                                        holder.lovers.setImageResource(R.drawable.ic_love2);
                                        holder.lovers_text.setText(Integer.toString(likescount));
                                    } else {
                                        likescount = (int) dataSnapshot.child(i).getChildrenCount();
                                        holder.lovers.setImageResource(R.drawable.ic_love);
                                        holder.lovers_text.setText(Integer.toString(likescount));
                                    }

                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {

                                }
                            });


                            holder.lovers.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {

                                    likechecker = true;

                                    likesrefernce.addValueEventListener(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                                            if (likechecker.equals(true)) {
                                                if (dataSnapshot.child(i).hasChild(currentUserId)) {
                                                    likesrefernce.child(i).child(currentUserId).removeValue();
                                                    likechecker = false;
                                                } else {
                                                    likesrefernce.child(i).child(currentUserId).setValue(true);
                                                    likechecker = false;
                                                }
                                            }

                                        }

                                        @Override
                                        public void onCancelled(@NonNull DatabaseError databaseError) {

                                        }
                                    });
                                }
                            });


                            holder.comments.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    Intent intent = new Intent(xContext,CommentsVideos.class);
                                    intent.putExtra("i",i);
                                    xContext.startActivity(intent);
                                }
                            });

                            holder.comments_text.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    Intent intent = new Intent(xContext,i);
                                    xContext.startActivity(intent);
                                }
                            });

                            holder.image_profile.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    SharedPreferences.Editor editor = xContext.getSharedPreferences("PREFS",MODE_PRIVATE).edit();
                                    editor.putString("profileid",member.getPublisher());
                                    editor.apply();
                                    Intent intent = new Intent(xContext,Profile.class);
                                    xContext.startActivity(intent);
                                }
                            });

                            holder.Notification.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    Intent intent = new Intent(Dashboard.this,Notifications.class);
                                    startActivity(intent);
                                }
                            });


                            holder.btFullScreen.setOnClickListener(new View.OnClickListener() {
                                @SuppressLint("UseCompatLoadingForDrawables")
                                @Override
                                public void onClick(View view) {
                                    //check condition
                                    if (flag) {
                                        //when flag is true
                                        //set enter full screen image
                                        //set portrait orientation
                                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                                        BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavViewBar);
                                        bottomNavigationView.setVisibility(View.GONE);

                                        flag = false;
                                    } else {
                                        //when flag is false,set exit full screen image
                                        holder.btFullScreen.setImageDrawable(getResources().getDrawable(R.drawable.ic_cross));
                                        //set landscape orientation
                                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);

                                        BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavViewBar);
                                        bottomNavigationView.setVisibility(View.GONE);


                                        //set flag value is true
                                        flag = true;
                                    }
                                }
                            });


                        }


                        @NonNull
                        @Override
                        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
                            View view = LayoutInflater.from(parent.getContext())
                                    .inflate(R.layout.syco,parent,false);

                            return new ViewHolder(view);
                        }
                    };

    @Override
    protected void onStart() {
        super.onStart();
            firebaseRecyclerAdapter.startListening();
            viewPager2.setAdapter(firebaseRecyclerAdapter);

    }

    @Override
    protected void onStop() {
        super.onStop();
            firebaseRecyclerAdapter.stopListening();

    }

    /**
         * BottomNavigationView setup
         */
        private void setupBottomNavigationView () {
            Log.d(TAG,"setupBottomNavigationView: setting up BottomNavigationView");
            BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavViewBar);
            BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationView);
            BottomNavigationViewHelper.enableNavigation(xContext,bottomNavigationView);
            Menu menu = bottomNavigationView.getMenu();
            MenuItem menuItem = menu.getItem(ACTIVITY_NUM);
            menuItem.setChecked(true);
        }


        @Override
        protected void onResume () {
            super.onResume();
            checkPermission();

        }



        //  initializeplayer();


        private void checkPermission () {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                return;
            }
            // request camera permission if it has not been grunted.
            if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
                    checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED ||
                    checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
            ) {
                requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE},CAMERA_PERMISSION_REQUEST_CODE);
            }
        }


        @Override
        public void onRequestPermissionsResult ( int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults){
            switch (requestCode) {
                case CAMERA_PERMISSION_REQUEST_CODE:
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        Toast.makeText(Dashboard.this,"permission has been grunted.",Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(Dashboard.this,"[WARN] permission is not grunted.",Toast.LENGTH_SHORT).show();
                    }
                    break;
            }
        }
}

这是查看器:

public class ViewHolder extends RecyclerView.ViewHolder {

    private final Context context = null;
    SimpleExoPlayer exoPlayer;
    //Initialize variable
    PlayerView playerView;
    ProgressBar progressBar;

    //uis
    ImageView comments,lovers,btFullScreen;
    private SimpleExoPlayer player;
    TextView lovers_text;
    TextView comments_text;
    TextView username1;
    TextView rTitleTv2,Notification,Challenges,username;
    CircleImageView image_profile;
    private User user2 = new User();
    Boolean finished;
    DatabaseReference reference1;

    int likescount;
    int commentscount;
    DatabaseReference likesref,postref;
    private ViewPager2 ViewPager2;
    private OnScrollListener OnScrollListener;
    MediaSource renderers;
    FirebaseUser firebaseUser;
    private Comment comment = new Comment();
    private video video = new video();

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        //uis
        image_profile = itemView.findViewById(R.id.image_profile);
        username = itemView.findViewById(R.id.username);


        comments = itemView.findViewById(R.id.comments);
        comments_text = itemView.findViewById(R.id.comments_text);
        rTitleTv2 = itemView.findViewById(R.id.rTitleTv2);
        Notification = itemView.findViewById(R.id.Notification);
        Challenges = itemView.findViewById(R.id.Challenges);
        btFullScreen = itemView.findViewById(R.id.bt_fullscreen);
        lovers = itemView.findViewById(R.id.lovers);
        lovers_text = itemView.findViewById(R.id.lovers_text);


    }


    public void setExoplayer(Application application,String name,String Videourl){

        TextView textView = itemView.findViewById(R.id.rTitleTv2);
        playerView = itemView.findViewById(R.id.player_view);
        progressBar = itemView.findViewById(R.id.progressBar);
        ImageView exo_pause = itemView.findViewById(R.id.exo_pause);
        ImageView exo_play = itemView.findViewById(R.id.exo_play);
        textView.setText(name);

        try {


            //Initialize load control
            LoadControl loadControl = new DefaultLoadControl();

            BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(application).build();
            TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
            exoPlayer = (SimpleExoPlayer) ExoPlayerFactory.newSimpleInstance(application);
            Uri video = Uri.parse(Videourl);
            DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("video");
            ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
            MediaSource mediaSource = new ExtractorMediaSource(video,dataSourceFactory,extractorsFactory,null,null);
            playerView.setPlayer(exoPlayer);
            //keep screen on
            playerView.setKeepScreenOn(true);
            exoPlayer.prepare(mediaSource);
            exoPlayer.setPlayWhenReady(true);

            // ...enable autoplay...


        }catch (Exception e){
            Log.e("ViewHolder","exoplayer error"+e.toString());
        }

        if (exoPlayer == null){
            exo_pause.setImageDrawable(application.getResources().getDrawable(R.drawable.ic_play));

        }




        exoPlayer.addListener(new Player.EventListener() {
            @Override
            public void onTimelineChanged(Timeline timeline,Object manifest,int reason){

            }
            @Override
            public void onTracksChanged(TrackGroupArray trackGroups,TrackSelectionArray trackSelections) {
            }

            @Override
            public void onLoadingChanged(boolean isLoading) {
                progressBar.setVisibility(isLoading ? View.VISIBLE : View.GONE);
            }

            @Override
            public void onPlayerStateChanged(boolean playWhenReady,int playbackState) {

                if (playbackState == STATE_BUFFERING){
                    //when buffering show progress bar
                    progressBar.setVisibility(View.VISIBLE);

                } else if (playbackState == STATE_READY){
                    //when ready hide
                    progressBar.setVisibility(View.GONE);
                    exoPlayer.isPlaying();

                }

                if (playbackState == STATE_ENDED){
                    //when ready hide
                    exoPlayer.isPlaying();
                    exoPlayer.getRepeatMode();

                }

            }

            @Override
            public void onRepeatModeChanged(int repeatMode ) {
                exo_play.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (exoPlayer != null){
                            exoPlayer.getRepeatMode();
                        }
                    }
                });
            }

            @Override
            public void onPlayerError(ExoPlaybackException error) {

            }

            @Override
            public void onPositionDiscontinuity(int reason) {

            }

            @Override
            public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {

            }
            @Override
            public void onSeekProcessed(){

            }
        });
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-