在分页器内播放视频 [英] play video inside view pager
问题描述
我必须在View Pager中播放3个视频,并且我正在使用PagerAdapter转到不同的页面. 我遇到了一些问题:第一次,第一个视频不呈现,它显示黑屏. 我的第二个视频只有在第一次访问时才播放.当我访问该页面时,其他视频会再次播放.以下是我正在使用的课程
I have to play 3 videos inside view pager and I am using PagerAdapter to go to different pages. I am facing some problems : On the first time, the first video does not render, it shows a black screen. My second video runs only the first time when visited. Other videos run again when I visit that page. Following are the classes I am using
enter code here
public class VideoPagerAdapter extends PagerAdapter {
Context context;
static int[] arrayvid;
private VideoView videoView;
LayoutInflater inflater;
View layout;
TextView message;
public VideoPagerAdapter(Context context, int[] arrayvid) {
this.context = context;
this.arrayvid = arrayvid;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public int getCount() {
return arrayvid.length;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layout = inflater.inflate(R.layout.video_layout, container, false);
videoView = (VideoView)layout.findViewById(R.id.video_view);
message = (TextView)layout.findViewById(R.id.message);
MediaController mediaController = new MediaController(context, false);
mediaController.setAnchorView(videoView);
((ViewPager) container).addView(layout);
return layout;
}
private Uri getPath(int id) {
Log.i("Video", "num" + id);
return Uri.parse("android.resource://com.example.videoviewpager/raw/video_" + id);
}
public void play(int position) {
videoView.setVideoURI(getPath(position+1));
videoView.requestFocus();
videoView.start();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==(View)object;
}
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
PagerAdapter adapter;
private int[] ids = {R.raw.video_1, R.raw.video_2,R.raw.video_3};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.video_pager);
// Pass results to ViewPagerAdapter Class
adapter = new VideoPagerAdapter(MainActivity.this,ids);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0);
//((VideoPagerAdapter) adapter).play(0);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position==0){
((VideoPagerAdapter) adapter).play(position);
}
if(position==1){
((VideoPagerAdapter) adapter).play(position);
}
if(position==2){
((VideoPagerAdapter) adapter).play(position);
}
}
//
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private Uri getPath(int id) {
Log.i("Video", "num" + id);
return Uri.parse("android.resource://com.example.videoviewpager/raw/video_" + id);
}
}
推荐答案
在viewpager中显示视频的最简单方法是使用FragmentStatePagerAdapter
而不是PagerAdapter
.
The simplest way to show video in viewpager is to use FragmentStatePagerAdapter
instead of PagerAdapter
.
在FragmentStatePagerAdapter
的getItem
下,创建片段实例,您将在其中显示视频.视频的播放和暂停/停止功能应在Fragment的onStart
& onStop
生命周期方法
Under getItem
of FragmentStatePagerAdapter
, create instance of fragment where you will show the video. Play and Pause/Stop functionality of the video should be handled in Fragment's onStart
& onStop
lifecycle methods
这篇关于在分页器内播放视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!