2013-02-22 1 views
2

저는이 CoverFlow를 사용하고 있습니다 : http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html.배경 변경 onewemselected Coverflow android

이 커버 플로우로 개인 앱을 만들었지 만 문제가 있습니다. 항목 (상자)을 선택하면 배경을 변경하고 싶습니다 (예 : http://www.macgeneration.com/news/voir/187282/squire-un-media-center-elegant-en-preparation). 나는 성공했지만 모든 것을 시도했다 ... 나는 다른 어댑터 뷰를해야 할 필요가있다. 나는 모른다. 너 내가 완벽한 날이 될 수 있도록 도울 수 있다면!

내 영어로 죄송합니다! 여기

내 자바 코드 : 당신을 위해

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




} 
` 

답변

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) { 
     } 

    } 

코드를 즐기십시오.