2

私はこの CoverFlow を使用しています: http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html

このカバーフローで個人用アプリを作成しましたが、問題があります: アイテム (ボックス) が選択されたときに背景を変更したい (このリンクのように: http://www.macgeneration.com/news/voir/187282/ squire-un-media-center-elegant-en-preparation )。私はすべてを試しましたが、成功しませんでした...別のアダプタービューを実行する必要があるかもしれませんが、わかりません。あなたが私を助けることができれば、完璧な日になります!

私の英語でごめんなさい!

ここに私のJavaコード:

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




}
`
4

1 に答える 1

1

それはあなたのために結構です。

これは getview メソッドで実現できます。setOnItemSelectedListenerを使用して選択位置を取得します。

以下のようなリスナーは、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) {
        }

    }

コードをお楽しみください。

于 2013-10-23T13:35:48.880 に答える