2016-06-21 2 views
1

Мне нужно сыграть 3 видеоролика внутри пейджера, и я использую PagerAdapter для перехода на разные страницы. У меня возникли некоторые проблемы: в первый раз первое видео не отображается, оно показывает черный экран. Мое второе видео работает только в первый раз, когда вы посещаете. Другие видео запускаются снова, когда я посещаю эту страницу. Ниже приведены классы, которые я используюplay video inside view pager

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); 
    } 
} 

ответ

0

Самый простой способ показать видео в ViewPager является использование FragmentStatePagerAdapter вместо PagerAdapter.

Под getItem из FragmentStatePagerAdapter, создайте экземпляр фрагмента, в котором вы покажете видео. Воспроизведение и пауза/остановка видео должны обрабатываться в Fragment's onStart & onStop методы жизненного цикла