用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...