Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android多媒體學習二:檢索Android的圖片庫,並顯示

Android多媒體學習二:檢索Android的圖片庫,並顯示

編輯:Android開發實例

上一篇中實例講解了Android中的Camera的調用和圖片的存儲,這篇文章,我們將學習如何檢索並顯示媒體庫中的圖片。

這裡有個問題需要注意,如果你在模擬器已經啟動的情況下,push了幾張圖片到SDCard中,建議將模擬器關了,再重新啟動

一下,否則,剛剛添加的圖片,是沒有辦法獲取到的。這是因為Android是在系統啟動的時候來掃描模擬器上SDCard中多媒體文件的。

閒話少說,看代碼:

 

  1. package demo.camera;  
  2. import android.app.Activity;  
  3. import android.database.Cursor;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.BitmapFactory;  
  6. import android.os.Bundle;  
  7. import android.provider.MediaStore.Images.Media;  
  8. import android.util.Log;  
  9. import android.view.View;  
  10. import android.widget.ImageButton;  
  11. import android.widget.TextView;  
  12. /**  
  13.  * 該類完成圖片的檢索,顯示功能  
  14.  * @author Administrator  
  15.  *  
  16.  */ 
  17. public class PhotoManager extends Activity {  
  18.       
  19.     public static final float DISPLAY_WIDTH = 200;  
  20.     public static final float DISPLAY_HEIGHT = 200;  
  21.       
  22.     //這裡采用ImageButton的原因是有Button的作用  
  23.     private ImageButton photoView;  
  24.     private TextView nameView;  
  25.       
  26.     private Cursor cursor;  
  27.       
  28.     private String photoPath; //存放某張圖片對應的位置信息  
  29.     private Bitmap currPhoto;  
  30.       
  31.     //這三個變量主要用來保存Media.DATA,Media.TITLE,Media.DISPLAY_NAME的索引號,來獲取每列的數據  
  32.     private int photoIndex;  
  33.     //private int titleIndex;  
  34.     private int nameIndex;  
  35.       
  36.     public void onCreate(Bundle savedInstanceState){  
  37.         super.onCreate(savedInstanceState);  
  38.         setContentView(R.layout.photo_view);  
  39.           
  40.         photoView = (ImageButton)this.findViewById(R.id.image_view);  
  41.         photoView.setOnClickListener(clickListener);  
  42.         nameView = (TextView)this.findViewById(R.id.view_name);  
  43.           
  44.         //指定獲取的列  
  45.         String columns[] = new String[]{  
  46.                 Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME  
  47.         };  
  48.         //cursor = this.managedQuery(Media.EXTERNAL_CONTENT_URI, columns, null, null, null);  
  49.         cursor = this.getContentResolver().query(Media.EXTERNAL_CONTENT_URI, columns, null, null, null);  
  50.         photoIndex = cursor.getColumnIndexOrThrow(Media.DATA);  
  51.         //titleIndex = cursor.getColumnIndexOrThrow(Media.TITLE);  
  52.         nameIndex = cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);  
  53.           
  54.         Log.v("HERE First:", "First Debug");  
  55.         //顯示第一張圖片,但是首先要判斷一下,Cursor是否有值  
  56.         if(cursor.moveToFirst()){  
  57.             showImage();  
  58.         }  
  59.     }  
  60.       
  61.     private View.OnClickListener clickListener = new View.OnClickListener() {  
  62.           
  63.         @Override 
  64.         public void onClick(View v) {  
  65.               
  66.             if(cursor.moveToNext()){  
  67.                 showImage();  
  68.             }  
  69.         }  
  70.     };  
  71.       
  72.     /**  
  73.      * 顯示圖像信息  
  74.      */ 
  75.     private void showImage(){  
  76.         photoPath = cursor.getString(photoIndex); //這裡獲取到的就是圖片存儲的位置信息  
  77.         //這裡怎樣獲取圖片呢?看decodeBitmap  
  78.         Log.v("Photo Path:", photoPath);  
  79.         currPhoto = decodeBitmap(photoPath);  
  80.         photoView.setImageBitmap(currPhoto);  
  81.         nameView.setText(cursor.getString(nameIndex));        
  82.     }  
  83.       
  84.     /**  
  85.      * 從path中獲取圖片信息  
  86.      * @param path  
  87.      * @return  
  88.      */ 
  89.     private Bitmap decodeBitmap(String path){  
  90.         BitmapFactory.Options op = new BitmapFactory.Options();  
  91.         op.inJustDecodeBounds = true;  
  92.         Bitmap bmp = BitmapFactory.decodeFile(path, op); //獲取尺寸信息  
  93.         //獲取比例大小  
  94.         int wRatio = (int)Math.ceil(op.outWidth/DISPLAY_WIDTH);  
  95.         int hRatio = (int)Math.ceil(op.outHeight/DISPLAY_HEIGHT);  
  96.         //如果超出指定大小,則縮小相應的比例  
  97.         if(wRatio > 1 && hRatio > 1){  
  98.             if(wRatio > hRatio){  
  99.                 op.inSampleSize = wRatio;  
  100.             }else{  
  101.                 op.inSampleSize = hRatio;  
  102.             }  
  103.         }  
  104.         op.inJustDecodeBounds = false;  
  105.         bmp = BitmapFactory.decodeFile(path, op);  
  106.         return bmp;  
  107.     }  
  108.       
  109. }  

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved