如何将SD卡中的图像加载到coverview中

时间:2012-12-18 05:00:41

标签: android image coverflow

我正在做一个由封面流程组成的应用程序。 目前我正在尝试从SD卡中获取封面流图像。 但我不确定应该如何显示图像。

这是图像适配器:

    public class ImageAdapter extends BaseAdapter {

     int mGalleryItemBackground;
     private Context mContext;

     private FileInputStream fis;
     private Integer[] mImageIds = {

       //Instead of using r.drawable, 
         i need to load the images from my sd card instead

             R.drawable.futsing,
             R.drawable.futsing2

     };

     private ImageView[] mImages;

     public ImageAdapter(Context c) {
      mContext = c;
      mImages = new ImageView[mImageIds.length];
     }

     public int getCount() {
         return mImageIds.length;
     }

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

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


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

         int screenSize = getResources().getConfiguration().screenLayout &
         Configuration.SCREENLAYOUT_SIZE_MASK;

         ImageView i = new ImageView(mContext); 
         i.setImageResource(mImageIds[position]);

         switch(screenSize) {
         case Configuration.SCREENLAYOUT_SIZE_XLARGE:
         //Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show();
         Display display4 = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
         int rotation4 = display4.getRotation();
         Log.d("XLarge:",String.valueOf(rotation4));

         /** LANDSCAPE **/
         if(rotation4 == 0 || rotation4 == 2) 
         {

         i.setLayoutParams(new CoverFlow.LayoutParams(300, 300));
         i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
         BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
         drawable.setAntiAlias(true);
         return i;
         }

         /** PORTRAIT **/
         else if (rotation4 == 1 || rotation4 == 3) 
         {
             i.setLayoutParams(new CoverFlow.LayoutParams(650, 650));
             i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
             BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
             drawable.setAntiAlias(true);
             return i;
         }
         break;

     default:
 }
        return null;

     }
   /** Returns the size (0.0f to 1.0f) of the views 
      * depending on the 'offset' to the center. */ 
      public float getScale(boolean focused, int offset) { 
        /* Formula: 1 / (2 ^ offset) */ 
          return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset))); 
      } 

 }

这就是我下载和保存文件的方式。我需要使用保存的图像并将其上传到我的coverflow

 // IF METHOD TO DOWNLOAD IMAGE
void downloadFile() {

    new Thread(new Runnable(){  // RUN IN BACKGROUND THREAD TO AVOID FREEZING OF UI
    public void run(){  
            Bitmap bmImg;
            URL myFileUrl = null;
            try {
                //for (int i = 0; i < urlList.size(); i ++)
                //{
                //url = urlList.get(i);
                myFileUrl = new URL("http://static.adzerk.net/Advertisers/d18eea9d28f3490b8dcbfa9e38f8336e.jpg");    // RETRIEVE IMAGE URL
                //}
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
            try {
                HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
                conn.setDoInput(true);
                conn.connect();
                InputStream in = conn.getInputStream();
                Log.i("im connected", "Download");
                bmImg = BitmapFactory.decodeStream(in);

                saveFile(bmImg);
            } catch (IOException e) {
                e.printStackTrace();
            }}   
    }).start(); // START THREAD

    }

    // SAVE THE IMAGE AS JPG FILE
private void saveFile(Bitmap bmImg) {
    File filename;
try {
     // GET EXTERNAL STORAGE, SAVE FILE THERE
     File storagePath = new File(Environment.getExternalStorageDirectory(),"Covers");
     storagePath.mkdirs();
    filename = new File(storagePath + "/image.jpg");
    FileOutputStream out = new FileOutputStream(filename);
    bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);

    out.flush();
    out.close();
    MediaStore.Images.Media.insertImage(getContentResolver(),filename.getAbsolutePath(), filename.getName(),
            filename.getName());

    // ONCE THE DOWNLOAD FINISHES, CLOSE DIALOG
   Toast.makeText(getApplicationContext(), "Image Saved!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
    e.printStackTrace();
}   

}

1 个答案:

答案 0 :(得分:1)

用于将图像从Sd卡加载到ImageView,将代码更改为:

将图片路径放在数组中:

 String strpath=Environment.getExternalStorageDirectory();
     private String[] mImageIds = {

             strpath+"a.jpg",
             strpath+"b.jpg",
             strpath+"c.jpg",
             .....
     };

要将getView设置为ImageView,您需要创建Drawable:

ImageView i = new ImageView(mContext); 
i.setImageDrawable(Drawable.createFromPath(mImageIds[position]));