[android]代码库
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) 回复
回复评论