Android圖片查看器-從SD卡讀取圖片

jopen 10年前發布 | 63K 次閱讀 Android Android開發 移動開發

本例是先從SD卡讀取圖片信息,顯示在列表視圖中;點擊圖片即可跳轉另一個activity查看圖片,并且可以瀏覽圖片。

讀取圖片代碼:

import java.util.ArrayList;  
import java.util.HashMap;  

import android.app.Activity;  
import android.content.Intent;  
import android.database.Cursor;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.os.Bundle;  
import android.provider.MediaStore.Images.Media;  
import android.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.view.ViewGroup;  
import android.widget.BaseAdapter;  
import android.widget.ImageView;  
import android.widget.ListView;  
import android.widget.TextView;  
/**  
 * 圖片展示類(列表視圖)  
 * @author Administrator  
 *  
 */  
public class LookImageActivity extends Activity{  
    /**列表視圖*/  
    private ListView listView;  
    /**圖片對象*/  
    private ImageView image;  
    /**圖片名字*/  
    private String name;  
    /**圖片名字集合*/  
    private ArrayList<String> list = new ArrayList();  
    /**圖片對象集合*/  
    private ArrayList<HashMap<String,Object>> picList = new ArrayList();  

    /**  
     * 初始化  
     */  
    public void initData(){  
        //查詢SD卡所有圖片,得到游標  
        Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);  
        while(cursor.moveToNext()){  
            //得到圖片的名字  
            String name = cursor.getString(cursor.getColumnIndex(Media.DISPLAY_NAME));  
            //得到圖片的描述信息  
            String info = cursor.getString(cursor.getColumnIndex(Media.DESCRIPTION));  
            //圖片數據  
            byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA));  
            HashMap map = new HashMap();  
            map.put("name", name==null ? "":name);  
            map.put("info", info==null ? "":info);  
            map.put("data", data);  
            picList.add(map);  
        }  
    cursor.close();  
    }  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);       
        setContentView(R.layout.look_iamge_layout);  
        //調用初始化方法  
        initData();  
        listView = (ListView) findViewById(R.id.image_listView);  
        //創建適配器  
        BaseAdapter adapter = new BaseAdapter() {  

            @Override  
            public View getView(int position, View convertView, ViewGroup parent) {  

                if(convertView==null){  
                    convertView = getLayoutInflater().inflate(R.layout.look_image_listview_content, null);  
                }  
                image = (ImageView) convertView.findViewById(R.id.picture_list_content_iv_pic);  
                TextView nameText = (TextView) convertView.findViewById(R.id.picture_list_content_tv_name);  
                TextView infoText = (TextView) convertView.findViewById(R.id.picture_list_content_tv_info);  

                name = picList.get(position).get("name").toString();  
                String info = picList.get(position).get("info").toString();  
                byte[] bs = (byte[]) picList.get(position).get("data");  
                //設置圖片信息  
                nameText.setText(name);  
                infoText.setText(info);  
                //設置圖片  
                Bitmap bitmap = BitmapFactory.decodeFile(new String(bs,0,bs.length-1));  
                image.setImageBitmap(bitmap);  
                //設置標識符  
                image.setTag(position);  
                list.add(name);  

                //為圖片添加監聽  
                image.setOnClickListener(new OnClickListener() {  

                    @Override  
                    public void onClick(View v) {  

                        Intent intent = new Intent(LookImageActivity.this,LargeImageActivity.class);  
                        int id =Integer.parseInt(v.getTag().toString());  
                        intent.putExtra("id", id);  
                        intent.putExtra("list", list);  
                        startActivity(intent);  
                    }  
                });  
                return convertView;  
            }  

            @Override  
            public long getItemId(int position) {  
                return position;  
            }  

            @Override  
            public Object getItem(int position) {  
                return position;  
            }  

            @Override  
            public int getCount() {  
                return picList.size();  
            }  
        };  

        listView.setAdapter(adapter);  
    }  
}  

瀏覽圖片,手勢滑動屏幕即可瀏覽圖片;這里用到手勢管理器和ontouchEvent()方法。

查看圖片代碼:

import java.util.ArrayList;  

import android.app.Activity;  
import android.database.Cursor;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.os.Bundle;  
import android.provider.MediaStore.Images.Media;  
import android.util.Log;  
import android.view.GestureDetector;  
import android.view.GestureDetector.OnGestureListener;  
import android.view.MotionEvent;  
import android.view.View;  
import android.widget.ImageView;  
/**  
 * 圖片查看類(手勢管理)  
 * @author Administrator  
 *  
 */  
public class LargeImageActivity extends Activity implements OnGestureListener{  
    /**圖片視圖*/  
    private ImageView image;  
    /**圖片所在的行號*/  
    private int id;  
    /**手勢管理器*/  
    private GestureDetector gd;  
    private Cursor cursor;  
    /**圖片的字節數組*/  
    private byte[] data;  
    /**圖片名字集合*/  
    private ArrayList<String> list = new ArrayList();  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.llook_image_browse_layout);  
        image = (ImageView) findViewById(R.id.look_imageView_large);  
        //注冊手勢管理  
        gd = new GestureDetector(this);  
        //得到行號  
        id = getIntent().getIntExtra("id", id);  
        //得到傳遞過來的圖片名字集合  
        list = getIntent().getStringArrayListExtra("list");  
        //調用設置圖片方法  
        setImage();   
    }  

    /**  
     * 設置圖片  
     */  
    public void setImage(){  
        //到SD卡查詢圖片信息  
        cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI,  
                null,null,null,null);  

        while(cursor.moveToNext()){  
            String name = cursor.getString(cursor.getColumnIndex(Media.DISPLAY_NAME));  
            byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA));  
            //查詢到的圖片名字和點擊傳遞過來的圖片名字相同時,設置圖片  
            if(name.equals(list.get(id))){  
                Bitmap bitmap = BitmapFactory.decodeFile(new String(data,0,data.length-1));  
                image.setImageBitmap(bitmap);  
            }  
        }  
    }  

    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        //把該事件交給手勢管理器來處理  
        return gd.onTouchEvent(event);  
    }  
    @Override  
    public boolean onDown(MotionEvent e) {  
        return false;  
    }  
    /**  
     * 對手勢操作后組件的處理  
     */  
    @Override  
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
            float velocityY) {  
        //從右往左滑動  
        if(e1.getX()-e2.getX()>50){  
            id++;  
            if(id<=cursor.getCount()){  
                setImage();  
            }else{  
                id=0;  
                setImage();  
            }  
        }  
        //從左往右滑動  
        if(e1.getX()-e2.getX()<50){  
            id--;  
            if(id>=0){  
                setImage();  
            }else{  
                id=cursor.getCount();  
                setImage();  
            }  
        }  
        return false;  
    }  
    @Override  
    public void onLongPress(MotionEvent e) {}  
    @Override  
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,  
            float distanceY) {  
        return false;  
    }  
    @Override  
    public void onShowPress(MotionEvent e) {}  
    @Override  
    public boolean onSingleTapUp(MotionEvent e) {  
        return false;  
    }  

}  
20130702092947390.png

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!