Android の Gallery で無限スクロールと自動再生を実現する方法

Galleryで無限ループと自動回転を実装するには、次の手順に従います

  1. XMLレイアウトファイルで、Galleryコントロールをレイアウトに追加します。
  2. アクティビティ上で、Galleryウィジェットのインスタンスを取得して、アダプタとリスナーを設定する。
  3. Gallery gallery = findViewById(R.id.gallery);
    gallery.setAdapter(new ImageAdapter(this)); // カスタムAdapterを設定して画像を表示
    gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    // 最後の一枚目の画像までスワイプしたら、自動的に一枚目に切り替える
    if (position == (gallery.getCount() – 1)) {
    gallery.setSelection(1);
    }
    // 一枚目の画像の一つ前の仮想画像までスワイプしたら、自動的に最後の一枚目に切り替える
    else if (position == 0) {
    gallery.setSelection(gallery.getCount() – 2);
    }
    }@Override
    public void onNothingSelected(AdapterView<?> parent) {
    }
    });
  4. アダプターを設定する際には、画像を表示するために ImageAdapter クラスを独自に定義する必要があります。
  5. ImageAdapter内でgetViewメソッドをオーバーライドし、画像をImageView内にロードします。
  6. ImageAdapterクラスはBaseAdapterを拡張し、コンテキストmContextをprivateフィールドとして持ちます。ImageAdapterのコンストラクタはコンテキストを引数に取り、ImageAdapterインスタンス構築の際にmContextに代入します。getCountメソッドは、画像の配列の長さimageUrls.lengthに2を加えた数を返します。この2つの追加要素は、無限ループを実現するために使用されます。getItemメソッドとgetItemIdメソッドは、それぞれnullと0を返します。getViewメソッドは、ImageViewインスタンスを生成または再利用し、画像の配列imageUrlsから画像をImageViewに設定します。この際、positionをimageUrls.lengthで割った余数を使用し、ループを実現します。
  7. onCreateメソッドにタイマーのタスクを追加して、自動的にスライドショーを行う。
  8. TimerTask task = new TimerTask() {
    @Override
    public void run() {
    runOnUiThread(new Runnable() {
    @Override
    public void run() {
    int selectedPosition = gallery.getSelectedItemPosition();
    gallery.setSelection((selectedPosition + 1) % gallery.getCount());
    }
    });
    }
    };
    Timer timer = new Timer();
    timer.schedule(task, 3000, 3000);

以上の手順で、AndroidのGalleryコントロールの無限ループと自動ローテーション機能を実現できます。

bannerAds