2012-12-18 1 views
1

커버 플로우로 구성된 애플리케이션을 수행하고 있습니다. 현재 커버 플로우 이미지를 SD 카드에서 가져 오려고합니다. 하지만 이미지를 어떻게 표시해야하는지 정확히 모르겠습니다. 어떻게 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))); 
     } 

} 

와 나는 다운로드하고 파일을 저장하는 방법이있다. 난 당신의 코드를 변경 저장된 이미지를 사용하여 이미지 뷰에 SD 카드에서 로딩 이미지 내 커버 플로우

// 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

에 업로드 할 필요가로 : 배열의

넣어 이미지 경로 :

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])); 
+0

어쨌든 sd 카드에 추가 한 다음 mImageIds에 항목을 추가 하시겠습니까? 표시 할 이미지 수를 수동으로 입력하고 싶지 않습니다. – Jolene

+0

@ 졸린 : sdcard 또는 특정 폴더? –

+0

특정 폴더,라고 할 수 있습니다 커버스 – Jolene