play video inside view pager

ぐ巨炮叔叔 提交于 2019-12-11 01:06:29

问题


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

回答1:


The simplest way to show video in viewpager is to use FragmentStatePagerAdapter instead of PagerAdapter.

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



来源:https://stackoverflow.com/questions/37942711/play-video-inside-view-pager

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!