綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] 使用Gallery畫廊 讀取sdcard裡的圖片

[複製連結] 查看: 3169|回覆: 9|好評: 1
跳轉到指定樓層
樓主
song6680 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2012-8-7 15:23

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
最近做了Camera的程式,一開始先把拍照下來的照片存到sdcard裡面
接下想做可以在程式裡面直接瀏覽照片
一直想不出個頭緒來
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
ploglin | 收聽TA | 只看該作者
發表於 2012-8-7 16:22
問題在哪?是不知道怎麼讀SD裡面的檔案嗎?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
 樓主| song6680 | 收聽TA | 只看該作者
發表於 2012-8-7 22:17
嗯...SDcard的檔案讀出來
我看的範例都只是把res的圖檔讀出來而已
這樣我要怎麼把SDcard裡面的照片全部讀出來?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
ploglin | 收聽TA | 只看該作者
發表於 2012-8-8 09:24
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
 樓主| song6680 | 收聽TA | 只看該作者
發表於 2012-8-8 09:46
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
 樓主| song6680 | 收聽TA | 只看該作者
發表於 2012-8-8 11:40
Gallery要是把圖檔放到一個陣列裡面
那我要怎麼把sdcard裡的圖檔放進去陣列?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
ploglin | 收聽TA | 只看該作者
發表於 2012-8-8 11:47
可以用 ArrayList<HashMap<String, String>>
例如

  1. ArrayList<HashMap<String, String>> al = new ArrayList<HashMap<String, String>>();
  2. HashMap<String, String> map = new HashMap<String, String>();
  3. map.put("image", "/sdcard/........")
  4. al.add(map);
複製代碼
主要是在實作 getView 時依傳進的 position ,取得對應的網址,並顯示圖片。
這樣說,不曉得有懂嗎?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

8
 樓主| song6680 | 收聽TA | 只看該作者
發表於 2012-8-21 12:29
ploglin 發表於 2012-8-8 11:47
可以用 ArrayList
例如主要是在實作 getView 時依傳進的 position ,取得對應的網址,並顯示圖片。
這樣說 ...

感謝前輩的指導,瀏覽照片已經OK
現在我要多加刪除的功能
  1. public void onCreateContextMenu(ContextMenu menu, View v,
  2.                                   ContextMenuInfo menuInfo) {


  3.                           // TODO Auto-generated method stub
  4.                           super.onCreateContextMenu(menu, v, menuInfo);
  5.                           menu.add(0,Upload,0,"上傳");
  6.                           menu.add(0,Delete,0,"刪除");
  7.                   }
  8.          
  9.                 @Override
  10.                 public boolean onContextItemSelected(final MenuItem item) {
  11.                         // TODO Auto-generated method stub
  12.                         switch (item.getItemId()) {
  13.                         case Upload:
  14.                                 Intent intent = new Intent();
  15.                                 intent.setClass(PreviewPhoto.this, upload.class);
  16.                                 startActivity(intent);
  17.                                
  18.                                 break;

  19.                         case Delete:
  20.                                 new AlertDialog.Builder(PreviewPhoto.this)
  21.                                
  22.                                 .setTitle("刪除照片")
  23.                                 .setMessage("確定要刪除照片 ")
  24.                                 .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
  25.                                        
  26.                                         public void onClick(DialogInterface dialog, int which) {
  27.                                                 // TODO Auto-generated method stub
  28.                                                

  29.                                         }
  30.                                 })
  31.                                 .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
  32.                                        
  33.                                         public void onClick(DialogInterface dialog, int which) {
  34.                                                 // TODO Auto-generated method stub
  35.                                                 dialog.cancel();
  36.                                         }
  37.                                 })
  38.                                 .setCancelable(false)
  39.                                 .show();
  40.                                
  41.                                 break;
  42.                         }
  43.                         return super.onContextItemSelected(item);
  44.                        
  45.                        
  46.                 }
複製代碼
我要如何刪除照片,包含SD卡的照片!!
用Remove嗎?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

9
starrainmoon | 收聽TA | 只看該作者
發表於 2013-10-12 15:10
最近也在學習Gallery加上ImageView瀏覽照片的部分,可是一直無法做出瀏覽照片的樣子,
網路上查相關範例都是res中先放圖片,可是如果要從sdcard上尋找的話,我看了上方提供放入陣列的部分,可是還是不太了解使用方法,不知道是否有相關範例。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

10
 樓主| song6680 | 收聽TA | 只看該作者
發表於 2013-10-15 17:51
  1. public void onCreate(Bundle savedInstanceState)
  2.           {
  3.             super.onCreate(savedInstanceState);
  4.             setContentView(R.layout.previewphoto);   
  5.             getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, //全屏顯示
  6.             WindowManager.LayoutParams.FLAG_FULLSCREEN);
  7.             
  8.             ImageList=getSD();
  9.             list = ImageList.toArray(new String[ImageList.size()]);
  10.             
  11.             //設定Switcher
  12.             mSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);
  13.             mSwitcher.setFactory((ViewFactory) this);
  14.             //設定載入Switcher的模式
  15.             mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
  16.                     android.R.anim.slide_in_left));
  17.             //設定輸出Switcher的模式
  18.             mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
  19.                     android.R.anim.slide_out_right));
  20.             
  21.             
  22.             final Gallery previewphoto = (Gallery) findViewById(R.id.gallery);
  23.                     
  24.             //新增ImageAdapter並設定给Gallery
  25.             previewphoto.setAdapter(new ImageAdapter(this,getSD()));
  26.             
  27.             previewphoto.setOnItemSelectedListener(this);

  28.             //設定一個itemclickListener事件
  29.             previewphoto.setOnItemClickListener(new OnItemClickListener()
  30.             {
  31.               public void onItemClick(AdapterView<?> parent,
  32.                                View v, int position, long id)
  33.               {
  34.                  int pos = position+1;
  35.                      Toast.makeText(PreviewPhoto.this, "第"+pos+"張照片", Toast.LENGTH_SHORT).show();
  36.                      

  37.               }
  38.             });
  39.             
  40.           }
複製代碼
  1. private List<String> getSD()
  2.           {

  3.             String PhotoFile;
  4.             /* 設定目前所在路徑 */
  5.             List<String> it=new ArrayList<String>();      
  6.             File f=new File(PhotoFile);  //SDcard路徑
  7.             File[]  files=f.listFiles();
  8.          
  9.             /* 將所有文件存入ArrayList中 */
  10.             for(int i=0;i<files.length;i++)
  11.             {
  12.               file=files[i];
  13.               if(getImageFile(file.getPath()))
  14.                 it.add(file.getPath());
  15.             }
  16.             return it;
  17.           }
  18.             
  19.           private boolean getImageFile(String fName)
  20.           {
  21.             boolean re;
  22.             
  23.             // 取得擴展名
  24.             String end=fName.substring(fName.lastIndexOf(".")+1,
  25.                           fName.length()).toLowerCase();
  26.             
  27.             // 按擴展名的類型决定MimeType
  28.             if(end.equals("jpg")||end.equals("gif")||end.equals("png")
  29.                     ||end.equals("jpeg")||end.equals("bmp"))
  30.             {
  31.               re=true;
  32.             }
  33.             else
  34.             {
  35.               re=false;
  36.             }
  37.             return re;
  38.           }

  39.           //改寫BaseAdapter自定義一ImageAdapter class
  40.           public class ImageAdapter extends BaseAdapter
  41.           {
  42.            
  43.             int mGalleryItemBackground;
  44.             private Context mContext;
  45.             private List<String> lis;
  46.             
  47.             
  48.             public ImageAdapter(Context c,List<String> li)
  49.             {
  50.                    
  51.               mContext = c;
  52.               lis=li;
  53.               /* 使用res/values/attrs.xml中的<declare-styleable>定義
  54.               * 的Gallery属性.*/
  55.               TypedArray a = obtainStyledAttributes(R.styleable.A_Gallery);
  56.               //取得Gallery属性的Index id
  57.               mGalleryItemBackground = a.getResourceId(
  58.                   R.styleable.A_Gallery_android_galleryItemBackground, 0);
  59.               //讓對象的styleable属性能夠反覆使用
  60.               a.recycle();
  61.               
  62.             }
  63.             
  64.            
  65.             public int getCount()
  66.             {
  67.                    
  68.               return lis.size();
  69.             }
  70.             
  71.            
  72.             public Object getItem(int position)
  73.             {
  74.               return position;
  75.             }
  76.             
  77.            
  78.             public long getItemId(int position)
  79.             {

  80.               
  81.               return position;
  82.             }
  83.             
  84.             
  85.             public View getView(final int position, View convertView,
  86.                                   ViewGroup parent)
  87.             {
  88.               //產生ImageView
  89.               ImageView imageview = new ImageView(mContext);
  90.               //設定圖片给imageView
  91.               Bitmap bm = BitmapFactory.decodeFile(lis.get(position).toString());
  92.               imageview.setImageBitmap(bm);
  93.               //重新設定圖片的寬高
  94.               imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
  95.               //重新設定Layout的寬高
  96.               imageview.setLayoutParams(new Gallery.LayoutParams(150,100));

  97.               imageview.setBackgroundResource(mGalleryItemBackground);
  98.               //設定Gallery背景圖
  99.               //傳回imageView
  100.               final Gallery gallery = (Gallery)findViewById(R.id.gallery);
  101.               gallery.setOnItemLongClickListener(new OnItemLongClickListener() {

  102.                                 public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
  103.                                         // TODO Auto-generated method stub
  104.                                         registerForContextMenu(gallery);
  105.                                         notifyDataSetChanged();
  106.                                         file_name = lis.get(position);
  107.                                         return false;
  108.                                 }
  109.                         });
  110.               return imageview;
  111.             }
  112.             
  113.           }

  114.         public void onItemSelected(AdapterView<?> parent, View view, int position,
  115.                         long id) {
  116.                   String  photoURL=list[position];
  117.                   Log.i("A",String.valueOf(position));
  118.               mSwitcher.setImageURI(Uri.parse(photoURL));
  119.         }

  120.         public void onNothingSelected(AdapterView<?> parent) {
  121.                 // TODO Auto-generated method stub
  122.                
  123.         }

  124.         public View makeView() {
  125.                
  126.             ImageView imageview = new ImageView(PreviewPhoto.this);
  127.             imageview.setBackgroundColor(0xFF000000);
  128.             imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
  129.             imageview.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
  130.             
  131.             return imageview;
  132.         }
複製代碼
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則