2013-04-06 78 views
0

enter image description here 這裏是我的CoverFlow與可繪:( 這是我的形象適配器代碼如何添加SD卡圖像到coverflow?

/** The Constant IMAGE_RESOURCE_IDS. */ 
private static final List<Integer> IMAGE_RESOURCE_IDS = new ArrayList<Integer>(DEFAULT_LIST_SIZE); 

/** The Constant DEFAULT_RESOURCE_LIST. */ 
private static final int[] DEFAULT_RESOURCE_LIST = { 
    R.drawable.promo_blue_bg_medium, 
    R.drawable.promo_green_bg_medium, 
    R.drawable.flow, 
    R.drawable.promo_yellow_bg_medium, 
    R.drawable.promo_black_bg_medium , 

}; 

/** The bitmap map. */ 
private final Map<Integer, WeakReference<Bitmap>> bitmapMap = new HashMap<Integer, WeakReference<Bitmap>>(); 

private final Context context; 

/** 
* Creates the adapter with default set of resource images. 
* 
* @param context 
*   context 
*/ 
public ResourceImageAdapter(final Context context) { 
    super(); 
    this.context = context; 
    setResources(DEFAULT_RESOURCE_LIST); 
} 

/** 
* Replaces resources with those specified. 
* 
* @param resourceIds 
*   array of ids of resources. 
*/ 
public final synchronized void setResources(final int[] resourceIds) { 



     String ExternalStorageDirectoryPath = Environment 
     .getExternalStorageDirectory() 
     .getAbsolutePath(); 

     String targetPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/CamWay/"; 



     File targetDirector = new File(targetPath); 


    IMAGE_RESOURCE_IDS.clear(); 
    for (final int resourceId : resourceIds) { 
     IMAGE_RESOURCE_IDS.add(resourceId); 
    } 
    notifyDataSetChanged(); 
} 

/* 
* (non-Javadoc) 
* 
* @see android.widget.Adapter#getCount() 
*/ 
@Override 
public synchronized int getCount() { 
    return IMAGE_RESOURCE_IDS.size(); 
} 

/* 
* (non-Javadoc) 
* 
* @see pl.polidea.coverflow.AbstractCoverFlowImageAdapter#createBitmap(int) 
*/ 
@Override 
protected Bitmap createBitmap(final int position) { 
    Log.v(TAG, "creating item " + position); 
    final Bitmap bitmap = ((BitmapDrawable) context.getResources().getDrawable(IMAGE_RESOURCE_IDS.get(position))) 
      .getBitmap(); 
    bitmapMap.put(position, new WeakReference<Bitmap>(bitmap)); 
    return bitmap; 
} 

}

你看,5繪製上市above.I想負荷5最後添加圖片來自folder.How我可以SD卡圖像添加到該代碼。

我試圖用顯示5張CoverFlow的最後拍攝的照片。 我希望有人能幫助我。

EDIT(最後一個代碼):

public class ResourceImageAdapter extends AbstractCoverFlowImageAdapter { 

    //Dosya alımı başlangıç 
    public class ImageAdapter extends BaseAdapter { 

      private Context mContext; 
      ArrayList<String> itemList = new ArrayList<String>(); 

      public ImageAdapter(Context c) { 
      mContext = c; 
      } 

      void add(String path){ 
      itemList.add(path); 
      } 

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

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return itemList.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView; 
       if (convertView == null) { // if it's not recycled, initialize some attributes 
        imageView = new ImageView(mContext); 
        imageView.setLayoutParams(new GridView.LayoutParams(220, 220)); 
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
        imageView.setPadding(8, 8, 8, 8); 
       } else { 
        imageView = (ImageView) convertView; 
       } 

       Bitmap bm = decodeSampledBitmapFromUri(itemList.get(position), 220, 220); 

       imageView.setImageBitmap(bm); 
       return imageView; 
     } 

     public Bitmap decodeSampledBitmapFromUri(String path, int reqWidth, int reqHeight) { 

      Bitmap bm = null; 
      // First decode with inJustDecodeBounds=true to check dimensions 
      final BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inJustDecodeBounds = true; 
      BitmapFactory.decodeFile(path, options); 

      // Calculate inSampleSize 
      options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

      // Decode bitmap with inSampleSize set 
      options.inJustDecodeBounds = false; 
      bm = BitmapFactory.decodeFile(path, options); 

      return bm; 
     } 

     public int calculateInSampleSize(

      BitmapFactory.Options options, int reqWidth, int reqHeight) { 
      // Raw height and width of image 
      final int height = options.outHeight; 
      final int width = options.outWidth; 
      int inSampleSize = 1; 

      if (height > reqHeight || width > reqWidth) { 
      if (width > height) { 
      inSampleSize = Math.round((float)height/(float)reqHeight);  
      } else { 
      inSampleSize = Math.round((float)width/(float)reqWidth);  
      } 
      } 

      return inSampleSize;  
     } 

     } 

      ImageAdapter myImageAdapter; 

      //Burası Dosya alımı bitimi 
    /** The Constant TAG. */ 
    private static final String TAG = ResourceImageAdapter.class.getSimpleName(); 

    /** The Constant DEFAULT_LIST_SIZE. */ 
    private static final int DEFAULT_LIST_SIZE = 20; 

    /** The Constant IMAGE_RESOURCE_IDS. */ 
    private static final List<Integer> IMAGE_RESOURCE_IDS = new ArrayList<Integer>(DEFAULT_LIST_SIZE); 

    /** The Constant DEFAULT_RESOURCE_LIST. */ 
    private static final int[] DEFAULT_RESOURCE_LIST = { 
     R.drawable.promo_blue_bg_medium, 
     R.drawable.promo_green_bg_medium, 
     R.drawable.flow, 
     R.drawable.promo_yellow_bg_medium, 
     R.drawable.promo_black_bg_medium , 

    }; 
    private String[] mFileStrings; 
    ArrayList<String> f = new ArrayList<String>(); 

    public void getFromSdcard() 
    { 
     File file= new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() ,"CamWay"); 

      if (file.isDirectory()) 
      { 
       File[] listFile = file.listFiles();//get list of filess 
       mFileStrings = new String[listFile.length]; 

       for (int i = 0; i < listFile.length; i++) 
       { 
        mFileStrings[i] = listFile[i].getAbsolutePath(); 
        f.add(listFile[i].getAbsolutePath());//add path of files to array list 
        System.out.println("...................................."+mFileStrings[i]); 
       } 
      } 
    } 

    /** The bitmap map. */ 
    private final Map<Integer, WeakReference<Bitmap>> bitmapMap = new HashMap<Integer, WeakReference<Bitmap>>(); 

    private final Context context; 

    /** 
    * Creates the adapter with default set of resource images. 
    * 
    * @param context 
    *   context 
    */ 
    public ResourceImageAdapter(final Context context) { 
     super(); 
     this.context = context; 
     setResources(DEFAULT_RESOURCE_LIST); 
    } 

    /** 
    * Replaces resources with those specified. 
    * 
    * @param resourceIds 
    *   array of ids of resources. 
    */ 
    public final synchronized void setResources(final int[] resourceIds) { 



      String ExternalStorageDirectoryPath = Environment 
      .getExternalStorageDirectory() 
      .getAbsolutePath(); 

      String targetPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/CamWay/"; 



      File targetDirector = new File(targetPath); 


     IMAGE_RESOURCE_IDS.clear(); 
     for (final int resourceId : resourceIds) { 
      IMAGE_RESOURCE_IDS.add(resourceId); 
     } 
     notifyDataSetChanged(); 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see android.widget.Adapter#getCount() 
    */ 
    @Override 
    public synchronized int getCount() { 
     return IMAGE_RESOURCE_IDS.size(); 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see pl.polidea.coverflow.AbstractCoverFlowImageAdapter#createBitmap(int) 
    */ 
    @Override 
    protected Bitmap createBitmap(final int position) { 
     Log.v(TAG, "creating item " + position); 
     final Bitmap bitmap = BitmapFactory.decodeFile(f.get(position)); 

     bitmapMap.put(position, new WeakReference<Bitmap>(bitmap)); 

     return bitmap; 
    } 
} 

編輯2:

啓動,然後顯示從開始3項。當我嘗試一下4+項目,它停止。 這是代碼 - getFromSdcard() ; int size= f.size()-5; //get the size of arraylist then decrease it by 5 //then loop from that point to your arraylist size //to get the last 5 items in the list for(int j=size;j<f.size();j++) { System.out.println("Position = "+j); System.out.println("Path of files"+f.get(j)); } final Bitmap bitmap = BitmapFactory.decodeFile(f.get(position)); bitmapMap.put(position, new WeakReference<Bitmap>(bitmap)); return bitmap;

04-06 21:41:05.013: E/AndroidRuntime(11217): at  com.project.smyrna.camway.ResourceImageAdapter.createBitmap(ResourceImageAdapter‌​.java:152) 

--line是final Bitmap bitmap = BitmapFactory.decodeFile(f.get(position));

回答

1
private String[] mFileStrings; 
ArrayList<String> f = new ArrayList<String>(); 

public void getFromSdcard() 
{ 
    File file= new File(android.os.Environment.getExternalStorageDirectory(),"Your Sdcard"); 

     if (file.isDirectory()) 
     { 
      listFile = file.listFiles();//get list of files 
      for (int i = listFile.length-5; i < listFile.length; i++) 
      { 
        //get the length decrease it 5 . loop to last 
       mFileStrings[i] = listFile[i].getAbsolutePath(); 
       f.add(listFile[i].getAbsolutePath());//add path of files to array list 
       System.out.println("...................................."+mFileStrings[i]); 
      } 
     } 
} 

您可以在SD卡的文件夾下獲得文件的路徑。但請確保SD卡文件夾沒有其他文件格式。 ArrayList然後傳遞到您的適配器以顯示CoverFlow的同一

,以過濾png格式,你可以使用下面的

File dir= new File(android.os.Environment.getExternalStorageDirectory()); 

文件然後調用

walkdir(dir); 

ArrayList<String> filepath= new ArrayList<String>();//contains list of all files ending with 

public void walkdir(File dir) { 
String Patternpng = ".png"; 

File listFile[] = dir.listFiles(); 

if (listFile != null) { 
for (int i = 0; i < listFile.length; i++) { 

if (listFile[i].isDirectory()) { 
    walkdir(listFile[i]); 
} else { 
    if (listFile[i].getName().endsWith(Patternpng)){ 
     //Do what ever u want 
     filepath.add(listFile[i].getAbsolutePath()); 
    } 
    } 
    } 
}  
} 

從的評論使我假設您需要顯示sdcard文件夾中的最後5個項目

  int size= f.size()-5; 
     //get the size of arraylist then decrease it by 5 
     //then loop from that point to your arraylist size 
     //to get the last 5 items in the list 
     for(int j=size;j<f.size();j++) 
     { 
      System.out.println("Position = "+j); 
      System.out.println("Path of files"+f.get(j)); 
     } 

您的適配器

public class MyAdapter extends AbstractCoverFlowImageAdapter { 


@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return f.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

    public View getView(int position, View convertView, ViewGroup parent) { 
     //inflate layout 
      //do something 
      //use the edit 2 to get last 5 items in the arraylist. 
      ImageView image=(ImageView)vi.findViewById(R.id.ivv); 
      Bitmap b = BitmapFactory.decodeFile(f.get(position)); 
      image.setImageBitmap(b);  
    } 

    } 

UPDATE:

  1. 添加只剩下最後5條文件路徑到您的ArrayList F IN getFromSdcard()

  2. 你的列表視圖項數爲f.size()

  3. 要獲取路徑,可以在getview()中使用f.get(position)。

在getFromSdcard()

 for (int i = listFile.length-5; i < listFile.length; i++) 
     // add only last 5 file paths from your folder 

在您的適配器

@Override 
public int getCount() { 
// TODO Auto-generated method stub 
return f.size(); 
} 

在getView

 ImageView image=(ImageView)vi.findViewById(R.id.ivv); 
     Bitmap b = BitmapFactory.decodeFile(f.get(position)); 
     image.setImageBitmap(b); 
+0

太感謝你了。我明白,但我無法實現。最終位圖bitmap =((BitmapDrawable)context.getResources()。getDrawable(f.get(position))) - 它說f應該是int。我有點困惑 – 2013-04-06 17:20:26

+1

位圖b = BitmapFactory.decodeFile(f.get (位置));檢查編輯 – Raghunandan 2013-04-06 17:24:16

+0

04-06 20:29:24.075:E/AndroidRuntime(28472):引起:java.lang.IndexOutOfBoundsException:索引2無效,大小爲0 - 最終位圖位圖= BitmapFactory.decodeFile(f.get (position)); ----我得到了這個異常。我想錯了,什麼大小?!??我想了解--- – 2013-04-06 17:32:08