用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - android代码库

实现SDcard图片浏览

2013-09-01 作者: GIFT举报

[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;
		}
	}
}







[代码运行效果截图]


实现SDcard图片浏览


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...