2

I'm using this CoverFlow : http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html.

I have created a personnal app with this coverflow but i have a problem : I want to change the background when the item (box) is selected (like this link :http://www.macgeneration.com/news/voir/187282/squire-un-media-center-elegant-en-preparation ). I've tried everything but without success... May be i need to do an other adapterview, i don't know. If you can help me will be a perfect day !

Sorry for my english !

Here my java code :

`public class CoverFlowExample extends Activity {
    /** Called when the activity is first created. */`

    @Override
    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

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



`  coverFlow.setAdapter(new ImageAdapter(this));`

`  ImageAdapter coverImageAdapter =  new ImageAdapter(this);`

`  coverImageAdapter.createReflectedImages();`

`  coverFlow.setAdapter(coverImageAdapter);`

`  coverFlow.setSpacing(-145);`
`  coverFlow.setSelection(0, true);`
`  coverFlow.setAnimationDuration(1000);`


    }


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

`     private FileInputStream fis;`

`     private Integer[] mImageIds = {
       R.drawable.demolitionman,
             R.drawable.diehard1,
             R.drawable.diehard2,
             R.drawable.diehard3,
             R.drawable.diehard4,
             R.drawable.district9,
             R.drawable.essai,
             R.drawable.essai2,
             R.drawable.dracula
     };`

     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 = 0;`


          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(180, 180));
          //imageView.setScaleType(ScaleType.MATRIX);
          imageView.setScaleType(ScaleType.FIT_CENTER); 
          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.setImageDrawable( mImages[position].getDrawable() );

         i.setLayoutParams(new CoverFlow.LayoutParams(340, 340));
         i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

         //Make sure we set anti-aliasing otherwise we get jaggies
         BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
         drawable.setAntiAlias(true);

         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)));`
     ` }`




}
`
Kosh
  • 6,140
  • 3
  • 36
  • 67

1 Answers1

1

it will fine for you.

You can achieve this in getview method. you will get selection position using setOnItemSelectedListener.

like below is listener which you have to set in Coverflow.

coverFlow.setOnItemSelectedListener(new SelectListener(this));

int sel_pos;

    public class ImageAdapter extends BaseAdapter 
    {

        private Context mContext;

        private Integer[] UnselectedImage = {
                R.drawable.a,
                R.drawable.b,
                R.drawable.c, 
                R.drawable.d, 
                R.drawable.e,
                R.drawable.f
        };

        private Integer[] selectedImage = 
            {
                R.drawable.a_sel,
                R.drawable.b_sel,
                R.drawable.c_sel, 
                R.drawable.d_sel, 
                R.drawable.e_sel,
                R.drawable.f_sel,
            };



        public ImageAdapter(Context c) 
        {
            mContext = c;

        }


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

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

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

        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @SuppressWarnings("deprecation")
        public View getView(int position, View convertView, ViewGroup parent)
        {               
            final ImageView i = new ImageView(mContext);            
            i.refreshDrawableState();
            i.setDrawingCacheEnabled(false);    
             i.setAdjustViewBounds(true);
            Log.e("position==", ""+position);           

            if(sel_pos==position)
            {               
                i.setImageResource(selectedImage[position]);                   
            }
            else 
            {               
                i.setImageResource(UnselectedImage[position]);

            }       
            i.setLayoutParams(new CoverFlow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);



            BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
            drawable.setAntiAlias(true);

            return i;

        }

private class SelectListener implements AdapterView.OnItemSelectedListener 
    {   

        public SelectListener(Context c) 
        {

        }

        @SuppressWarnings("deprecation")
        public void onItemSelected(AdapterView<?> parent, View v, int position,long id) 
        {
            Log.e("Changed----->", "" + position);
            // Zoom the new selected view
            try 
            {               

                sel_pos = position;             
                coverImageAdapter.notifyDataSetChanged();



            } catch (Exception animate) 
            {

            }       

        }

        public void onNothingSelected(AdapterView<?> parent) {
        }

    }

Enjoy the code.

Hasmukh
  • 4,632
  • 2
  • 30
  • 44