问题
I need to get an image from a uri into my VideoView when it loads. It should disappear and start playing the video when play is hit. This is my VideoView code -
<RelativeLayout
android:id="@+id/video_frame"
android:layout_width="fill_parent"
android:layout_height="300dp"
android:background="#000"
>
<VideoView
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
/>
<ImageButton
android:id="@+id/play_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/ic_media_play"
/>
</RelativeLayout>
This is how I use it -
final VideoView video = (VideoView) convertView.findViewById(R.id.video);
Uri uri = Uri.parse(submission.getUrl());
video.setVideoURI(uri);
final ImageButton playButton = (ImageButton) convertView.findViewById(R.id.play_button);
video.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
playButton.setVisibility(View.VISIBLE);
}
});
playButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (video.isPlaying()){
}else{
video.start();
playButton.setVisibility(View.GONE);
}
}
});
回答1:
VideoView shows a video. It does not show an image. Similarly, ImageView shows an image. It does not show a video.
So, use a FrameLayout wrapped around an ImageView and a VideoView. Have the ImageView be visible and the VideoView be invisible at the outset. Load the image into the ImageView. When the user clicks your play button, switch the visibility such that the VideoView is now visible and the ImageView is invisible, and start playback of your video.
回答2:
Create a thumpnail of video and show it on ImageView. In case you need to show play button you need another ImageView (with Play button icon). On click of Play icon image view play the video on VideoView.
imageView.setImageBitmap(ThumbnailUtils.createVideoThumbnail(urlPath,
MediaStore.Video.Thumbnails.MICRO_KIND));
回答3:
I have created an ImageView for thumbnail like this
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:clickable="true"
android:focusable="true">
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="220dp"/>
<ImageView
android:id="@+id/videoView_thumbnail"
android:layout_width="match_parent"
android:layout_height="220dp"
android:scaleType="centerCrop"/>
</RelativeLayout>
And add setOnPreparedListener and setOnCompletionListener in Java like this way
VideoView videoView = (VideoView) view.findViewById(R.id.video_view);
ImageView thumbnailView=(ImageView)view.findViewById(R.id.videoView_thumbnail);
Glide.with(getApplicationContext()).load(your_Image_Path).into(thumbnailView);
//you can add progress dialog here until video is start playing;
mediaController= new MediaController(getContext());
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setKeepScreenOn(true);
videoView.setVideoPath(your_video_path);
videoView.start(); //call this method for auto playing video
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
thumbnailView.setVisibility(View.GONE);
//you can Hide progress dialog here when video is start playing;
}
});
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
videoView.stopPlayback();
thumbnailView.setVisibility(View.VISIBLE);
}
});
It works for me very well. I hope it's useful for all.
来源:https://stackoverflow.com/questions/31038379/android-how-to-set-a-thumbnail-on-a-videoview-with-a-uri-source