I am working on slide video with view pager, pager adapter functionality. my view pager holds Video view and play video button to display video and play video from gallery. i have implemented pager adapter to display video.
Problem is when my current item position is 0 at that time i am trying to play video i click on play button but video will not play and button image not replace with stop icon. when i swipe a view at that moment item on position 1 automatically show play button with stop icon and we can see video. and another swipe will perform random functionality possibility play video or will not play video. how i can overcome from this problem plz help and guide me to solve this issue.
Thank You in Advance.
here i am posting my pager adapter class
public class SlideImageAdapter extends PagerAdapter {
private ArrayList<String> VIDEOS;
private LayoutInflater inflater;
private Context context;
private VideoView mVideoView;
private ImageView mImageView;
private ImagePickerActivity activity;
private boolean isPlaying = false;
public SlideImageAdapter(Context context, ArrayList<String> IMAGES) {
this.context = context;
this.VIDEOS = IMAGES;
inflater = LayoutInflater.from(context);
activity = ImagePickerActivity.getInstance();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return VIDEOS.size();
}
@Override
public Object instantiateItem(ViewGroup view, int position) {
View imageLayout = inflater.inflate(R.layout.row_slide_image_item, view, false);
assert imageLayout != null;
mImageView = imageLayout.findViewById(R.id.mPlayVideo);
mVideoView = imageLayout.findViewById(R.id.mVideoView);
mImageView.setVisibility(View.VISIBLE);
mImageView.setOnClickListener(view1 -> {
//For Testing only to check click event
if (isPlaying){
Toast.makeText(context, "Player request to stop", Toast.LENGTH_SHORT).show();
isPlaying = false;
mImageView.setImageResource(R.drawable.ic_play_button);
} else {
Toast.makeText(context, "Player request to play", Toast.LENGTH_SHORT).show();
isPlaying = true;
mImageView.setImageResource(R.drawable.ic_stop);
}
});
DisplayMetrics displayMetrics = new DisplayMetrics();
(activity).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
DebugLog.e("MSG: ==> " + "WIDTH: " + width + " | HEIGHT: " + height);
DebugLog.e("MSG: " + VIDEOS.get(position));
File file = new File(VIDEOS.get(position));
Uri videoUri = null;
if (Build.VERSION.SDK_INT >= 26) {
videoUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", file);
} else {
videoUri = Uri.fromFile(file);
}
try {
mVideoView.setMediaController(new MediaController(activity));
mVideoView.requestFocus();
mVideoView.setVideoURI(videoUri);
mVideoView.seekTo(100);
mVideoView.setOnCompletionListener(mediaPlayer -> {
mediaPlayer.start();
});
} catch (Exception ex) {
ex.printStackTrace();
DebugLog.e(ex.getMessage());
}
if (mVideoView.isPlaying()){
mVideoView.stopPlayback();
mImageView.setImageResource(R.drawable.ic_play_button);
}
mImageView.setVisibility(View.VISIBLE);
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mImageView.setImageResource(R.drawable.ic_play_button);
}
});
view.addView(imageLayout, 0);
return imageLayout;
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void finishUpdate(@NonNull ViewGroup container) {
super.finishUpdate(container);
}
}