niraj kumar
niraj kumar

Reputation: 103

How to show/hide play/pause Button in video view in android?

I am doing an Android project based on Video view. I want to show play button before the user clicks play, when user decides to pause video - pause button shows up. Clicking on pause button should trigger playing the video again from the same place where it was paused (like YouTube video).

im1.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

    vv1.setVideoURI(Uri.parse("android.resource://com.example.cm.filmfestival/" + R.raw.mission));
    im1.setVisibility(View.INVISIBLE);
    im2.setVisibility(View.INVISIBLE);
    vv1.start();
  }
});

im2.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

    vv1.stopPlayback();
    im2.setVisibility(View.VISIBLE);
    im1.setVisibility(View.INVISIBLE);
  }
});

@Override
public boolean onTouch(View v, MotionEvent event) {
    im1.setVisibility(View.VISIBLE);
    vv1.start();
    im2.setVisibility(View.VISIBLE);
    vv1.stopPlayback();

    return true;
}

Upvotes: 7

Views: 12665

Answers (3)

Soropromo
Soropromo

Reputation: 1282

private boolean stopped = false;
private ImageView postVideoPlaypauseIcon;

//set it to any play/pause icon
postVideoPlaypauseIcon = mView.findViewById(R.id.playpause_icon);


private int stopPosition;

Add above code.

then, add CustomVideoView class, make VideoView extend it and create an object video and use findviewbyid

public class CustomVideoView extends VideoView {
    private PlayPauseListener mListener;

    public CustomVideoView(Context context) {
        super(context);
    }

    public CustomVideoView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setPlayPauseListener(PlayPauseListener listener) {
        mListener = listener;
    }

    @Override
    public void pause() {
        super.pause();
        if (mListener != null) {
            mListener.onPause();
        }
    }

    @Override
    public void start() {
        super.start();
        if (mListener != null) {
            mListener.onPlay();
        }
    }

    public static interface PlayPauseListener {
        void onPlay();
        void onPause();
    }

}

replace xml for VideoView with below code

`<package-name.CustomVideoView
                        android:id="@+id/custom_videoview"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        />`

Finally, add setOnTouchListener for listening to touch.

video.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if(stopped == false){
                        stopPosition = postVideo.getCurrentPosition(); 
                        video.pause();
                        stopped = true;
                    } else if(stopped == true){
                        video.seekTo(stopPosition);
                        video.start();
                        stopped = false;
                    }
                    Log.e("TAP","from video ");
                    return false;
                }
            });

add setPlayPauseListener on your videoView object

video.setPlayPauseListener(new CustomVideoView.PlayPauseListener() {
                @Override
                public void onPlay() {
                    System.out.println("Play!");
                    videoPlaypauseIcon.setVisibility(View.VISIBLE);
                }

                @Override
                public void onPause() {
                    System.out.println("Pause!");
                    videoPlaypauseIcon.setVisibility(View.INVISIBLE);
                }
            });

used this for reference

Upvotes: 0

Bharat Hangarge
Bharat Hangarge

Reputation: 571

Use the code below

       <VideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />

     public VideoView myVideoView;  
     private int position = 0;  
     private MediaController mediaControls;

   // set the media controller buttons
    if (mediaControls == null)
    {
        mediaControls = new MediaController(MainActivity.this);
    }

    // initialize the VideoView
    myVideoView = (VideoView) findViewById(R.id.video_view);

   try
    {

        // set the media controller in the VideoView
        myVideoView.setMediaController(mediaControls);

        // set the uri of the video to be played
        myVideoView.setVideoURI(Uri.parse("your UrI"));

    } catch (Exception e)
    {
        Log.e("Error", e.getMessage());
        e.printStackTrace();
    }

    myVideoView.requestFocus();

   // we also set an setOnPreparedListener in order to know when the video
    // file is ready for playback

    myVideoView.setOnPreparedListener(new OnPreparedListener()
    {

        public void onPrepared(MediaPlayer mediaPlayer)
        {
            // if we have a position on savedInstanceState, the video
            // playback should start from here
            myVideoView.seekTo(position);

            System.out.println("vidio is ready for playing");

            if (position == 0)
            {
                myVideoView.start();
            } else
            {
                // if we come from a resumed activity, video playback will
                // be paused
                myVideoView.pause();
            }
        }
    });

Upvotes: 3

Fabrice Benimana
Fabrice Benimana

Reputation: 11

Set an OntouchListener on your VideoView and then in Ontouch callback check if the video is playing or paused before pausing or playing it.

Upvotes: 0

Related Questions