2016-11-28 11 views
0

저는 RecyclerView에서 YouTube 동영상 미리보기 이미지를 보여준 키즈 앱을 개발 중입니다. 나열된 동영상 미리보기 이미지를 클릭하면 동영상이 전체 화면으로 재생됩니다 (YouTube API를 사용하여 미리보기 이미지를 가져오고 Youtube 의도로 동영상을 재생합니다). 나는 그렇게하는 것을 성공한다. 문제는 비디오가 재생되는 동안 터치 스크린 이벤트를 비활성화하려는 것입니다. 모든 종류의 도움을 주시면 감사하겠습니다.
가 mainactivity.xml :android에서 동영상이 재생되는 동안 터치 스크린 이벤트를 사용 중지하는 방법

<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으로가는 것을 방지합니다. 비디오가 끝나면 (오류 또는 비디오 종료) 투명 레이어가 제거됩니다. 원하는 경우 finish();onStopped() 내부로 직접 호출 할 수도 있습니다.

+0

나는 분명히 이것을 시도 할 것이고 곧 반응 할 것이다. 감사합니다 – Iqra

+0

죄송합니다, 난 그냥 직접 코드를 테스트,이 작동하지 않습니다 youtube 플레이어는 비디오가 재생 중일 때보기 오버레이를 허용하지 않습니다. 자동으로 비디오를 중지하고 logcat에 경고를 표시합니다. YouTubePlayer.ErrorReason.UNAUTHORIZED_OVERLAY에 대해 검색 할 수 있습니다. – HendraWD

+0

아마 같은 기술을 사용할 수 있지만 YouTubePlayerView 대신 WebView를 사용할 수 있습니다. – HendraWD