package com.example.photoviewer; |
import java.io.IOException; |
import java.io.InputStream; |
import java.util.ArrayList; |
import android.app.Activity; |
import android.content.ContentResolver; |
import android.content.Context; |
import android.content.Intent; |
import android.content.res.TypedArray; |
import android.database.Cursor; |
import android.graphics.Bitmap; |
import android.graphics.BitmapFactory; |
import android.net.Uri; |
import android.os.Bundle; |
import android.provider.MediaStore; |
import android.view.View; |
import android.view.View.OnClickListener; |
import android.view.ViewGroup; |
import android.widget.AdapterView; |
import android.widget.AdapterView.OnItemClickListener; |
import android.widget.BaseAdapter; |
import android.widget.Gallery; |
import android.widget.ImageView; |
public class PhotoGallery extends Activity { |
public final static int SMALL_IMAGE = 0 ; |
public final static int ORIGINAL_IMAGE = 1 ; |
public final static int SHOW_PHOTO = 0 ; |
private ImageAdapter mAdapter = null ; |
private ImageView mPreview = null ; |
private long mPreviewId = 0 ; |
public void onCreate(Bundle savedInstanceState) { |
super .onCreate(savedInstanceState); |
setContentView(R.layout.gallery); |
Gallery gallery = (Gallery)findViewById(R.id.gallery1); |
mPreview = (ImageView)findViewById(R.id.preview); |
// 「ImageAdapter」という新しいクラスのインスタンスを作成する |
mAdapter = new ImageAdapter( this ); |
// 「ImageAdapter」をgalleryに設定する |
gallery.setAdapter(mAdapter); |
// 「OnItemClickListener」のインスタンスを作成して「gallery」に設定する |
gallery.setOnItemClickListener( new OnItemClickListener(){ |
public void onItemClick(AdapterView<?> parent, View v, |
int position, long id){ |
mPreview.setImageBitmap(mAdapter.getImageBitmap(position, |
ORIGINAL_IMAGE)); |
mPreviewId = mAdapter.getItemId(position); |
} |
}); |
// 「OnClickListener」のインスタンスを作成し「mPreview」に設定する |
mPreview.setOnClickListener( new OnClickListener(){ |
public void onClick(View v){ |
Intent intent = new Intent(PhotoGallery. this , |
PhotoViewerActivity. class ); |
intent.putExtra( "id" ,mPreviewId); |
startActivityForResult(intent,SHOW_PHOTO); |
} |
}); |
} |
public class ImageAdapter extends BaseAdapter { |
ContentResolver mResolver = null ; |
private int mGalleryItemBackground = 0 ; |
private ArrayList<Long> mImageIds = new ArrayList<Long>(); |
private ArrayList<String> mImageNames = new ArrayList<String>(); |
public ImageAdapter(Context c){ |
// ContentResolverを取得 |
mResolver = c.getContentResolver(); |
// イメージ画像用のURIを使用して画像データのリストを入手 |
Cursor cursor = mResolver.query( |
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, |
null , null , null , null ); |
// whileループでqueryの結果のデータを順番に処理 |
while (cursor.moveToNext()){ |
// 画像データの名前を取り出す |
String name = cursor.getString( |
cursor.getColumnIndex( |
MediaStore.Images.Media.TITLE)); |
// ファイルのIDを取得 |
long id=cursor.getLong( |
cursor.getColumnIndex( |
MediaStore.Images.Media._ID)); |
// ArrayListに値を追加 |
mImageIds.add(id); |
mImageNames .add(name); |
} |
cursor.close(); |
} |
// 「getCount」メソッドの定義 |
public int getCount(){ |
return mImageIds.size(); |
} |
// 「getItem」メソッドの定義 |
public Object getItem( int position){ |
return mImageNames.get(position); |
} |
// 「getItemId」メソッドの定義 |
public long getItemId( int position){ |
return mImageIds.get(position); |
} |
// 「getView」メソッドの定義 |
public View getView( int position,View convertView, ViewGroup parent){ |
if (convertView == null ){ |
convertView = new ImageView(PhotoGallery. this ); |
// 「getImageBitmap」メソッドでGallery用のBitmapを取得しImageViewにセット |
((ImageView)convertView).setImageBitmap(getImageBitmap(position, SMALL_IMAGE)); |
// 「Gallery.LayoutParams」を作成し、Viewのサイズを150 x 100にセット |
convertView.setLayoutParams( new Gallery.LayoutParams( 200 , 200 )); |
// 「ScaleType」で「FIT_XY」を指定し、画像をViewのサイズに合わせる |
((ImageView)convertView).setScaleType(ImageView.ScaleType.FIT_XY); |
// 「BackGroundResource」メソッドを「GalleryItemBackgournd」のリソースに設定 |
convertView.setBackgroundResource(mGalleryItemBackground); |
} |
return convertView; |
} |
private Bitmap getImageBitmap( int position, int size){ |
// 「Uri.withAppendedPath」を使用して画像のURIとIdから |
// 直接ファイルを表すURIを作成 |
Uri imageUri = Uri.withAppendedPath( |
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" +getItemId(position)); |
// BitmapFactoryでsamplingを設定するために |
//「BitmapFactory.Options」のオブジェクトを作成 |
BitmapFactory.Options options = new BitmapFactory.Options(); |
if (size == SMALL_IMAGE){ |
// Gallery用の縮小イメージは「inSampleSize」に「10」を指定 |
options.inSampleSize = 10 ; |
} else { |
// それ以外は「inSampleSize」を「4」に設定 |
options.inSampleSize = 4 ; |
} |
Bitmap resizedBitmap = null ; |
try { |
// 「contentResolver」にUriを指定してInputStreamを開く |
InputStream is = mResolver.openInputStream(imageUri); |
// ファイルから画像を取り出して「resizedBitmap」オブジェクトを作成 |
resizedBitmap = BitmapFactory.decodeStream(is, null ,options); |
is.close(); |
} catch (IOException e){ |
return null ; |
} |
return resizedBitmap; |
} |
} |
} |
高级设计师
by: 神马 发表于:2013-09-01 23:36:19 顶(2) | 踩(0) 回复
回复评论