2011-11-03 2 views
0

다음은 CoverFlow에 사용한 활동 및 이미지 어댑터입니다. 하지만이 커버 플로우로 SD 카드 디렉토리에 저장 한 모든 이미지를로드하려고합니다. 어떻게해야합니까? All이라는 SD 카드 디렉토리에 이미지를 저장했습니다. 해당 폴더에서 이미지를로드하고 싶습니다. 어떤 도움을 주셔서 감사합니다.커버 플로우 용 이미지 어댑터

public class CoverFlowExample extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     CoverFlow coverFlow; 
     coverFlow = new CoverFlow(this); 

     coverFlow.setAdapter(new ImageAdapter(this)); 

     ImageAdapter coverImageAdapter = new ImageAdapter(this); 

     coverImageAdapter.createReflectedImages(); 

     coverFlow.setAdapter(coverImageAdapter); 

     coverFlow.setSpacing(-15); 
     coverFlow.setSelection(8, true); 


     setContentView(coverFlow); 

     //Use this if you want to use XML layout file 
     //setContentView(R.layout.main); 
     //coverFlow = (CoverFlow) findViewById(R.id.coverflow); 


    } 

    public class ImageAdapter extends BaseAdapter { 
      int mGalleryItemBackground; 
      private Context mContext; 

      private FileInputStream fis; 

      private Integer[] mImageIds = { 

        R.drawable.top, 
        R.drawable.bottom, 
        R.drawable.top, 
        R.drawable.bottom, 
        R.drawable.top, 
        R.drawable.bottom, 
        R.drawable.top, 
        R.drawable.bottom, 
        R.drawable.top 

      }; 

      private ImageView[] mImages; 

      public ImageAdapter(Context c) { 
       mContext = c; 
       mImages = new ImageView[mImageIds.length]; 
      } 
      public boolean createReflectedImages() { 
        //The gap we want between the reflection and the original image 
        final int reflectionGap = 7; 


        int index = 0; 
        for (int imageId : mImageIds) { 
         Bitmap originalImage = BitmapFactory.decodeResource(getResources(), 
           imageId); 
         int width = originalImage.getWidth(); 
         int height = originalImage.getHeight(); 


         //This will not scale but will flip on the Y axis 
         Matrix matrix = new Matrix(); 
         matrix.preScale(1, -1); 

         //Create a Bitmap with the flip matrix applied to it. 
         //We only want the bottom half of the image 
         Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height/2, width, height/2, matrix, false); 


         //Create a new bitmap with same width but taller to fit reflection 
         Bitmap bitmapWithReflection = Bitmap.createBitmap(width 
          , (height + height/2), Config.ARGB_8888); 

         //Create a new Canvas with the bitmap that's big enough for 
         //the image plus gap plus reflection 
         Canvas canvas = new Canvas(bitmapWithReflection); 
         //Draw in the original image 
         canvas.drawBitmap(originalImage, 0, 0, null); 
         //Draw in the gap 
         Paint deafaultPaint = new Paint(); 
         canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint); 
         //Draw in the reflection 
         canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null); 

         //Create a shader that is a linear gradient that covers the reflection 
         Paint paint = new Paint(); 
         LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, 
         bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, 
         TileMode.CLAMP); 
         //Set the paint to use this shader (linear gradient) 
         paint.setShader(shader); 
         //Set the Transfer mode to be porter duff and destination in 
         paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 
         //Draw a rectangle using the paint with our linear gradient 
         canvas.drawRect(0, height, width, 
         bitmapWithReflection.getHeight() + reflectionGap, paint); 

         ImageView imageView = new ImageView(mContext); 
         imageView.setImageBitmap(bitmapWithReflection); 
         imageView.setLayoutParams(new CoverFlow.LayoutParams(120, 180)); 
         imageView.setScaleType(ScaleType.MATRIX); 
         mImages[index++] = imageView; 

        } 
        return true; 
      } 

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

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

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

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

       //Use this code if you want to load from resources 
       // ImageView i = new ImageView(mContext); 
       //i.setImageResource(mImageIds[position]); 
       //i.setLayoutParams(new CoverFlow.LayoutParams(130, 130)); 
       //i.setScaleType(ImageView.ScaleType.MATRIX);   
       //return i; 

       return mImages[position]; 
      } 
      /** 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))); 
      } 

     } 

    } 

답변

0

로드 할 파일을 알고 싶다면 (new File("/sdcard/All")).list()을 사용할 수 있습니다. 모든 파일을 Bitmap으로 변환하려면 BitmapFactory.decodeFile(String pathName)을 사용할 수 있습니다.

+0

고마워요. 늦게 응답해서 죄송합니다. 하지만 언급 한 코드는 어디에 지정해야합니까? –

+0

'onCreate()'는 좋은 장소입니다. 이렇게하면 활동이 시작될 때 이미지가로드되도록 할 수 있습니다. 액티비티 라이프 사이클에 대해 더 자세히 알고 싶다면 여기를 살펴보십시오. [link] (http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle) – Thomas

관련 문제