ViewPager サンプル

Eclipse Android 開発プラグイン ADT、古いバージョンでは、Swipe のサンプル(android.support.v4.view.ViewPager
のサンプルを簡単に作成するウィザードがあった。(バージョンNo.は忘れた)
ADT r21では既に簡単に作成するウィザードは無くなってる。
古いバージョンで作成したサンプルを引っ張り出し、ContentResolver で端末内画像を表示するようにした
サンプルを書いてサンプルコードの記録としておくことにした。

レイアウトXML定義 layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SD card 画像"
        android:textAppearance="?android:attr/textAppearanceMedium" />
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"  >
       <android.support.v4.view.PagerTitleStrip
           android:id="@+id/pager_title_strip"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_gravity="top"
           android:background="#33b5e5"
           android:paddingBottom="4dp"
           android:paddingTop="4dp"
           android:textColor="#ffffff" />
     </android.support.v4.view.ViewPager>

</LinearLayout>

Activity のコード

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.MediaStore;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
/**
 * SwipeSampleMainActivity
 */

public class SwipeSampleMainActivity extends Activity{
   List<String> mNamelist;
   List<Uri> mUriList;

   @Override
   protected void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      // ContentResolver 読込み private method
      readContent();

      ViewPager viewPager = (ViewPager)findViewById(R.id.pager);
      viewPager.setAdapter(new PagerAdapter(){
         @Override
         public CharSequence getPageTitle(int position)
{
            // ページのタイトル
            return mNamelist.get(position);
         }
         // 表示するViewがコンテナに含まれているか判定
         @Override
         public boolean isViewFromObject(View view, Object object){
            return view.equals(object);
         }
         @Override
         public int getCount(){
            return mNamelist.size();
         }

         /* ページ生成
          * @see android.support.v4.app.FragmentPagerAdapter#instantiateItem(android.view.ViewGroup, int)
          */

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

            ImageView view = new ImageView(getApplicationContext());
            ContentResolver resolver = getContentResolver();
            try{
               InputStream in = resolver.openInputStream(mUriList.get(position));
               BitmapFactory.Options options = new BitmapFactory.Options();
               options.inSampleSize = 10;
               options.inJustDecodeBounds = false;
               view.setImageBitmap(BitmapFactory.decodeStream(in, null, options));

               in.close();
            }catch(Exception e){
               Logger.e(e.getMessage(), e);
            }
            // ViewGroup に生成したViewを追加
            *1{
         do{
            mUriList.add(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                         , Long.toString(c.getLong(c.getColumnIndex(BaseColumns._ID)))));
            mNamelist.add(c.getString(c.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)));
         }while(c.moveToNext());
      }

      c.close();
   }
}

表示結果、、、

f:id:posturan:20160313194124p:plain



左方向スワイプ (途中。。。)

f:id:posturan:20160313194118p:plain



スワイプ後、、

f:id:posturan:20160313194110p:plain



*1:ViewPager)container).addView(view, 0);
            return view;

         }
         /* ページ破棄
          * @see android.support.v4.view.PagerAdapter#destroyItem(android.view.ViewGroup, int, java.lang.Object)
          */

         @Override
         public void destroyItem(ViewGroup container, int position, Object object){
            ((ViewPager)container).removeView((View)object);
         }

      });
   }
   /* ContentResolver で 読込み */
   private void readContent(){
      mNamelist = new ArrayList<String>();
      mUriList = new ArrayList<Uri>();
      ContentResolver contentResolver = getContentResolver();
      Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
      String projections = new String{
         BaseColumns._ID
         , MediaStore.MediaColumns.DISPLAY_NAME
      };
      Cursor c = contentResolver.query(uri, projections, null, null, null);
      if (c.moveToFirst(