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();
}
}
表示結果、、、
左方向スワイプ (途中。。。)
スワイプ後、、
*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(