2016-11-28 4 views
0

私はRecyclerViewでyoutubeビデオのサムネイルを表示しているキッズアプリを開発しています。リストされているビデオサムネイルをクリックすると、ビデオはフルスクリーンで再生されます(YouTube APIを使用してサムネイルを取得し、YouTubeの意図でビデオを再生します)。私はすべてそうすることで成功しています。問題は、ビデオの再生中にタッチスクリーンイベントを無効にしたいということです。あらゆる種類の援助が評価されます。以下は私のコードです:
mainactivity.xml:ビデオがアンドロイドで再生中にタッチスクリーンイベントを無効にする方法

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="2" 
    android:orientation="vertical" 
    tools:context="com.example.pc.fkidshell.Main4Activity"> 

    <include layout="@layout/toolbar" 
     android:id="@+id/my_thirdtoolbar"/> 

    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/VideoList" 
     android:layout_below="@+id/my_thirdtoolbar" 
     android:paddingTop="20dp" 
     android:scrollbars="vertical"> 

    </android.support.v7.widget.RecyclerView> 
</RelativeLayout> 

video_row.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/thumbnailView" 
     android:layout_gravity="center_horizontal"/> 
</LinearLayout> 

mainactivity.java:

public class Main4Activity extends AppCompatActivity implements YouTubeThumbnailView.OnInitializedListener, YouTubeThumbnailLoader.OnThumbnailLoadedListener{ 
    Toolbar third_toolbar; 
    YouTubeThumbnailView thumbnailView; 
    YouTubeThumbnailLoader thumbnailLoader; 
    RecyclerView VideoList; 
    RecyclerView.Adapter adapter; 
    List<Drawable> thumbnailViews; 
    List<String> VideoId; 
    String videoid; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main4); 
     third_toolbar = (Toolbar) findViewById(R.id.my_thirdtoolbar); 
     setSupportActionBar(third_toolbar); 
     getSupportActionBar().setTitle(R.string.sectitle); 
     getSupportActionBar().setIcon(R.drawable.tblogo); 

     thumbnailViews = new ArrayList<>(); 
     VideoList = (RecyclerView) findViewById(R.id.VideoList); 
     RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(this); 
     VideoList.setLayoutManager(layoutManager); 
     adapter=new VideoListAdapter(); 
     VideoList.setAdapter(adapter); 
     VideoId = new ArrayList<>(); 
     thumbnailView = new YouTubeThumbnailView(this); 
     thumbnailView.initialize("API Key", this); 

    } 

    @Override 
    public void onInitializationSuccess(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader youTubeThumbnailLoader) { 
     thumbnailLoader = youTubeThumbnailLoader; 
     youTubeThumbnailLoader.setOnThumbnailLoadedListener(Main4Activity.this); 
     thumbnailLoader.setPlaylist("PLXRActLQ03oY_6AQb-5EMuKFYQA_fDE40"); 
    } 

    @Override 
    public void onInitializationFailure(YouTubeThumbnailView youTubeThumbnailView, YouTubeInitializationResult youTubeInitializationResult) { 

    } 

    public void add() { 
     adapter.notifyDataSetChanged(); 
     if (thumbnailLoader.hasNext()) 
      thumbnailLoader.next(); 
    } 

    @Override 
    public void onThumbnailLoaded(YouTubeThumbnailView youTubeThumbnailView, String s) { 
     thumbnailViews.add(youTubeThumbnailView.getDrawable()); 
     VideoId.add(s); 
     add(); 
    } 

    @Override 
    public void onThumbnailError(YouTubeThumbnailView youTubeThumbnailView, YouTubeThumbnailLoader.ErrorReason errorReason) { 

    } 

    public class VideoListAdapter extends RecyclerView.Adapter<VideoListAdapter.MyView>{ 
     public class MyView extends RecyclerView.ViewHolder{ 
      ImageView imageView; 
      public MyView(View itemView) { 
       super(itemView); 
       imageView= (ImageView) itemView.findViewById(R.id.thumbnailView); 
      } 
     } 

     @Override 
     public VideoListAdapter.MyView onCreateViewHolder(ViewGroup parent, int viewType) { 
      View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_row, parent, false); 
      return new MyView(itemView); 
     } 

     @Override 
     public void onBindViewHolder(VideoListAdapter.MyView holder, final int position) { 
      holder.imageView.setImageDrawable(thumbnailViews.get(position)); 
      holder.imageView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) 
       { 
        videoid=VideoId.get(position); 

        Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v="+videoid+"&index="+position+"&list=PLXRActLQ03oY_6AQb-5EMuKFYQA_fDE40")); 
        intent.putExtra("force_fullscreen",true); 
        startActivity(intent); 

       } 
      }); 
     } 

     @Override 
     public int getItemCount() { 
      return thumbnailViews.size(); 
     } 
    } 
} 
+0

あなたのAPIキーを削除してください – HendraWD

+0

ありがとうございました!私は忘れる。 – Iqra

+0

実際にYoutube APIを使用している場合、なぜIntent.ACTION_VIEWを使用するのですか? YouTubePlayerView.cueVideo()を使用する必要があります。または他のもの – HendraWD

答えて

0

私のソリューションは、YoutubePlayerActivity.java

を行う必要があります
public class YoutubePlayerActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener, 
     YouTubePlayer.PlaybackEventListener { 

    public static final String KEY_VIDEO_ID = "videoId"; 
    private static final int RECOVERY_REQUEST = 1; 
    private static final String API_KEY = "your API_KEY"; 

    private YouTubePlayerView youTubePlayerView; 
    private View topLayer; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_youtube_player); 

     youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player); 
     youTubePlayerView.initialize(API_KEY, this); 

     topLayer = findViewById(R.id.top_layer); 

     WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
     DisplayMetrics dm = new DisplayMetrics(); 
     wm.getDefaultDisplay().getMetrics(dm); 

     topLayer.setLayoutParams(new RelativeLayout.LayoutParams(dm.widthPixels - 1, dm.heightPixels - 1)); 
     topLayer.setClickable(true); 
    } 

    @Override 
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean wasRestored) { 
     if (!wasRestored) { 
      youTubePlayer.setPlaybackEventListener(this); 
      youTubePlayer.loadVideo(getIntent().getStringExtra(KEY_VIDEO_ID)); 
     } 
    } 

    @Override 
    public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { 
     if (youTubeInitializationResult.isUserRecoverableError()) { 
      youTubeInitializationResult.getErrorDialog(this, RECOVERY_REQUEST).show(); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == RECOVERY_REQUEST) { 
      // Retry initialization if user performed a recovery action 
      youTubePlayerView.initialize(API_KEY, this); 
     } 
    } 

    @Override 
    public void onPlaying() { 
     topLayer.setVisibility(View.VISIBLE); 
    } 

    @Override 
    public void onPaused() { 

    } 

    @Override 
    public void onStopped() { 
     topLayer.setVisibility(View.GONE); 
    } 

    @Override 
    public void onBuffering(boolean b) { 

    } 

    @Override 
    public void onSeekTo(int i) { 

    } 
} 

とレイアウトを作成するには、私はコードが何をするか、それはactivity_youtube_player.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/youtube_player" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="false" /> 

    <View 
     android:id="@+id/top_layer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerInParent="true" 
     android:clickable="true" /> 
</RelativeLayout> 

あなたがそう

Intent openYoutubePlayerActivity = new Intent(context, YoutubePlayerActivity.class); 
openYoutubePlayerActivity.putExtra(YoutubePlayerActivity.KEY_VIDEO_ID, videoId); 
startActivity(openYoutubePlayerActivity); 

使用YoutubePlayerActivityを開始することができますという名前?それは自動的にYouTubeのビデオを再生し、ビデオが開始するときにYouTubePlayerViewの上に透明なレイヤーを表示します。透明なレイヤーのandroid:clickable="true"プロパティは、クリックを直接YouTubePlayerViewに防止します。ビデオが停止すると(エラーまたはビデオのいずれかによって終了)、透明レイヤーが削除されます。また、onStopped()メソッド内に直接finish();メソッドを呼び出すこともできます。

+0

私は確かにこれを試して、すぐに応答します。ありがとう – Iqra

+0

申し訳ありません私はちょうどコードを直接テストしました、これは動作しません、youtubeプレーヤーは、ビデオが再生されているときに表示オーバーレイを許可しません。自動的にビデオを停止し、logcatで警告を表示します。 YouTubePlayer.ErrorReason.UNAUTHORIZED_OVERLAYについて検索することができます。 – HendraWD

+0

同じテクニックを使用できますが、YouTubePlayerViewではなくWebViewを使用することもできます – HendraWD

関連する問題