首页 > 解决方案 > ExoPlayer PlayerView OnClickListener 不工作

问题描述

在我的应用程序中,我想处理用户点击PlayerViewOnClickListener 不被调用并且不抛出异常。我添加app:use_controller="false" 到 XML PlayerView

我试图设置OnTouchListener但我需要MotionEvent.ACTION_UP被调用,这也没有发生(因为我不想在用户滚动时处理这种情况,我需要在用户点击 PlayerView 时处理这种情况)。

  class FeedHolder extends RecyclerView.ViewHolder {
        private TextView displayName, jobTitle, action, date, likedBy;
        private ImageIndicator profile_pic;
        private ImageView videoOptions, likeImage, shareImage;
        private PlayerView playerView;
        private WebView webView;

        @SuppressLint("SetJavaScriptEnabled")
        FeedHolder(View itemView) {
            super(itemView);
            profile_pic = itemView.findViewById(R.id.profile_pic);
            likedBy = itemView.findViewById(R.id.tv_like_by);
            date = itemView.findViewById(R.id.tv_date);
            likeImage = itemView.findViewById(R.id.img_like);
            shareImage = itemView.findViewById(R.id.img_share);
            displayName = itemView.findViewById(R.id.tv_display_name);
            jobTitle = itemView.findViewById(R.id.tv_job_title);
            action = itemView.findViewById(R.id.btn_action);
            videoOptions = itemView.findViewById(R.id.video_options);
            playerView = itemView.findViewById(R.id.exo_player);
            webView = itemView.findViewById(R.id.web_view);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.setWebViewClient(new AnimationWebViewClient());
            webView.getSettings().setAllowFileAccessFromFileURLs(true);
            webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
        }
    }


@Override
    public void onBindViewHolder(@NonNull FeedHolder holder, int position) {
      holder.playerView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ...
                }
            });

}

标签: androidexoplayerexoplayer2.x

解决方案


您可以使用:

video.setControllerAutoShow(false);
video.setUseController(false);
video.getVideoSurfaceView().setOnClickListener(view -> {
          Log.e("GET", "clicked!");
          if(player.getPlayWhenReady()){
               player.setPlayWhenReady(false);
          }else{
               player.setPlayWhenReady(true);
          }
});

推荐阅读