在分页器内播放视频 [英] play video inside view pager

查看:87
本文介绍了在分页器内播放视频的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须在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.

FragmentStatePagerAdaptergetItem下,创建片段实例,您将在其中显示视频.视频的播放和暂停/停止功能应在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆