web-dev-qa-db-ja.com

サーバーからViewPager内のVideoViewでビデオを再生する方法

私はサーバーからビデオを取得するアプリを開発しようとします、viewpager内のvideoviewで再生します

  • 1:一部のビデオが再生されません。または黒のアクティビティショー。
  • 2:ページをスクロールしてもビデオは停止しません。

`の代わりにURLを使用する方法

Android.resource://mypackagename/video1.mp4

pageIsChangedのときに一時停止/停止する方法。チュートリアルやヒットはありがたいです。

ここで私のコードは ソースコード

ViewPagerAdapter.Java

import Android.content.Context;
import Android.media.MediaPlayer;
import Android.media.MediaPlayer.OnPreparedListener;
import Android.net.Uri;
import Android.support.v4.view.PagerAdapter;
import Android.support.v4.view.ViewPager;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ImageView;
import Android.widget.LinearLayout;
import Android.widget.MediaController;
import Android.widget.TextView;
import Android.widget.VideoView;

public class ViewPagerAdapter extends PagerAdapter {

    Context context;
    String[] rank;
    String[] country;
    String[] population;
    int[] flag;
    LayoutInflater inflater;
    static int[] arrayvid;
    private VideoView mVideoView;

    public ViewPagerAdapter(Context context, String[] rank, String[] country,
            String[] population, int[] flag, int[] arrayvid) {
        this.context = context;
        this.rank = rank;
        this.country = country;
        this.population = population;
        this.flag = flag;
        this.arrayvid = arrayvid;
    }

    @Override
    public int getCount() {
        return rank.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == ((LinearLayout) object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, final int position) {

        // Declare Variables
        TextView txtrank;
        TextView txtcountry;
        TextView txtpopulation;
        ImageView imgflag;

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.viewpager_item, container,
                false);

        // Locate the TextViews in viewpager_item.xml
        txtrank = (TextView) itemView.findViewById(R.id.rank);
        txtcountry = (TextView) itemView.findViewById(R.id.country);
        txtpopulation = (TextView) itemView.findViewById(R.id.population);
        imgflag = (ImageView) itemView.findViewById(R.id.flag);
        mVideoView = (VideoView) itemView.findViewById(R.id.VVExe);

        txtrank.setText(rank[position]);
        txtcountry.setText(country[position]);
        txtpopulation.setText(population[position]);
        imgflag.setImageResource(flag[position]);

        mVideoView.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true);
            }
        });

        MediaController mediaController = new MediaController(context, false);
        mediaController.setAnchorView(mVideoView);
        mVideoView.setMediaController(mediaController);
        ((ViewPager) container).addView(itemView);
        return itemView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        ((ViewPager) container).removeView((LinearLayout) object);

    }

    public void pausevideo() {
        mVideoView.stopPlayback();

    }

    public void play(int position) {
        mVideoView.setVideoURI(Uri
                .parse("Android.resource://mypackagename/"
                        + arrayvid[position]));
        mVideoView.requestFocus();
        mVideoView.start();

    }
}

MainActivity.Java

import Android.app.Activity;
import Android.os.Bundle;
import Android.support.v4.view.PagerAdapter;
import Android.support.v4.view.ViewPager;
import Android.support.v4.view.ViewPager.OnPageChangeListener;
import Android.view.View;
import Android.widget.ImageButton;

public class MainActivity extends Activity {

    // Declare Variables
    ViewPager viewPager;
    PagerAdapter adapter;
    String[] rank;
    private ImageButton play;
    String[] country;
    String[] population;
    int[] flag;
    public int position;
    int[] arrayvid;
    boolean isRunning = true;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from viewpager_main.xml
        setContentView(R.layout.viewpager_main);
        play = (ImageButton) findViewById(R.id.btnPlayAB);
        // Generate sample data
        rank = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };

        country = new String[] { "China", "India", "United States",
                "Indonesia", "Brazil", "Pakistan", "Nigeria", "Bangladesh",
                "Russia", "Japan" };

        population = new String[] { "1,354,040,000", "1,210,193,422",
                "315,761,000", "237,641,326", "193,946,886", "182,912,000",
                "170,901,000", "152,518,015", "143,369,806", "127,360,000" };

        flag = new int[] { R.drawable.china, R.drawable.india,
                R.drawable.unitedstates, R.drawable.indonesia,
                R.drawable.brazil, R.drawable.pakistan, R.drawable.nigeria,
                R.drawable.bangladesh, R.drawable.russia, R.drawable.japan };

        arrayvid = new int[] { R.raw.basiccrunch, R.raw.bicyclecrunch,
                R.raw.reversecrunch, R.raw.longarmcrunch,
                R.raw.crossovercrunch, R.raw.rightobliquecrunch,
                R.raw.leftobliquecrunch, R.raw.halfcurl,
                R.raw.verticallegcrunch, R.raw.plank };

        // Locate the ViewPager in viewpager_main.xml
        viewPager = (ViewPager) findViewById(R.id.pager);
        // Pass results to ViewPagerAdapter Class
        adapter = new ViewPagerAdapter(MainActivity.this, rank, country,
                population, flag, arrayvid);
        // Binds the Adapter to the ViewPager
        viewPager.setAdapter(adapter);

        play.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (isRunning) {
                    ((ViewPagerAdapter) adapter).play(position);
                    isRunning = false;
                    play.setBackgroundResource(R.drawable.pausee);
                } else {
                    ((ViewPagerAdapter) adapter).pausevideo();
                    isRunning = true;
                    play.setBackgroundResource(R.drawable.playy);
                }

            }
        });

    }

}

viewpager_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/LinearLayout1"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:gravity="center"
    Android:orientation="vertical"
    Android:padding="10dp"
    Android:weightSum="10" >

    <LinearLayout
        Android:layout_width="fill_parent"
        Android:layout_height="0dip"
        Android:layout_weight="1.6"
        Android:orientation="horizontal" >

        <LinearLayout
            Android:layout_width="0dip"
            Android:layout_height="fill_parent"
            Android:layout_weight="3"
            Android:orientation="vertical" >

            <LinearLayout
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:orientation="horizontal" >

                <TextView
                    Android:id="@+id/ranklabel"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:text="@string/ranklabel" />

                <TextView
                    Android:id="@+id/rank"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />
            </LinearLayout>

            <LinearLayout
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:orientation="horizontal" >

                <TextView
                    Android:id="@+id/countrylabel"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:text="@string/countrylabel" />

                <TextView
                    Android:id="@+id/country"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />
            </LinearLayout>

            <LinearLayout
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:orientation="horizontal" >

                <TextView
                    Android:id="@+id/populationlabel"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:text="@string/populationlabel" />

                <TextView
                    Android:id="@+id/population"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content" />
            </LinearLayout>
        </LinearLayout>

        <ImageView
            Android:id="@+id/flag"
            Android:layout_width="0dip"
            Android:layout_height="fill_parent"
            Android:layout_weight="1"
            Android:background="#000000"
            Android:padding="1dp" />
    </LinearLayout>

    <VideoView
        Android:id="@+id/VVExe"
        Android:layout_width="wrap_content"
        Android:layout_height="0dip"
        Android:layout_marginTop="5dp"
        Android:layout_weight="7.9"
        Android:gravity="center" />

</LinearLayout>

viewpager_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/LinearLayout1"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:orientation="vertical"
        Android:weightSum="10" >

        <Android.support.v4.view.ViewPager
            Android:id="@+id/pager"
            Android:layout_width="wrap_content"
            Android:layout_height="0dip"
            Android:layout_weight="8.6" />

<LinearLayout
    Android:layout_width="fill_parent"
      Android:layout_height="0dip"
        Android:layout_weight="1.4"
    Android:gravity="center"
    Android:padding="10dp" >

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_gravity="center"
        Android:background="#696969"
        Android:gravity="center"
        Android:orientation="horizontal"
        Android:weightSum="10" >

        <LinearLayout
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="1" >
        </LinearLayout>

        <ImageButton
            Android:id="@+id/btnprevAB"
            Android:layout_width="0dp"
            Android:layout_height="wrap_content"
            Android:layout_weight="2"
            Android:background="@drawable/prevsel" />

        <LinearLayout
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="1" >
        </LinearLayout>

        <ImageButton
            Android:id="@+id/btnPlayAB"
            Android:layout_width="0dp"
            Android:layout_height="wrap_content"
            Android:layout_weight="2"
            Android:background="@drawable/playsel" />

        <LinearLayout
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="1" >
        </LinearLayout>

        <ImageButton
            Android:id="@+id/btnNextAB"
            Android:layout_width="0dp"
            Android:layout_height="wrap_content"
            Android:layout_weight="2"
            Android:background="@drawable/nextsel" />

        <LinearLayout
            Android:layout_width="0dp"
            Android:layout_height="match_parent"
            Android:layout_weight="1" >
        </LinearLayout>
    </LinearLayout>

    </LinearLayout>

enter image description here

29
Attaullah

FragmentStatePagerAdapterの代わりにPagerAdapterを使用する方が良いと思います。このシナリオでは、OnPageChangeListenerは不要になり、onResumeonPauseなどのフラグメントライフサイクルコールバックメソッドを使用して、ビデオを再生または一時停止できます。

pageIsChangedのときに一時停止/停止する方法。チュートリアルやヒットはありがたいです。

以下のリンクを使用して、このアダプターの使用方法を理解し、フラグメントライフサイクルメソッドを使用して独自のロジックを作成できます。

Android FragmentStatePagerAdapterの例

FragmentStatePagerAdapter

8
mmlooloo

FrameViedoView と書きました。これにより、ビデオの再生パフォーマンスが向上します。

ViewPagerでも機能します。

使用方法

追加 http://bright.github.io/maven-repo/リポジトリへ:

repositories {
    maven {
        url "http://bright.github.io/maven-repo/"
    }
}

そして、モジュール内で依存関係を宣言します:

dependencies {
    compile('mateuszklimek.framevideoview:framevideoview:1.1.0@aar')
    //other dependencies
}

examples では、単純なActivity内で使用する方法を見つけることができます。

ブログ投稿FrameVideoViewについて読んでください。

2
klimat
  1. ViewPagerスクロール/変更ページであるかどうかを検出するには、単にOnPageChangeListenerViewPager を添付する必要があります。

  2. リモートURLからビデオを再生するには、標準のMediaController/MediaPlayerを使用できます。 this tutoria lを見てください。

1
bonnyz
 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

           //do the needful action

            }

            @Override
            public void onPageSelected(int position) {
                System.out.println("selected " + position);
   //do the needful action
                }

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
1
Jithu P.S

OnPageChangeListenerからビデオにアクセスする必要があります。それをしなければなりません:

view.setTag("view"+position);内のpublic Object instantiateItem(ViewGroup container, int position)

そして、OnPageChangeListenerからそれを取り戻すことができた後:

View viewTag = viewPager.findViewWithTag("view" + viewPager.getCurrentItem());

その後

VideoView videoViewTag = (VideoView)viewTag.findViewById(R.id.videoView);
0
user7588066