2012-02-02 86 views
2

我已經用coverflow創建了一個應用程序。我已到處尋找,並且似乎無法解決如何使用onclicklistener在單擊封面流中的每個單獨圖像時只進行一項簡單的活動。下面是我的代碼,我希望有人可以幫助,因爲這個應用程序是不錯的,從這個1問題!Android Coverflow OnClickListener

import java.io.FileInputStream;

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.LinearGradient; 
import android.graphics.Matrix; 
import android.graphics.Paint; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.Typeface; 
import android.graphics.Bitmap.Config; 
import android.graphics.PorterDuff.Mode; 
import android.graphics.Shader.TileMode; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.ImageView.ScaleType; 

public class MainActivity 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(4, true); 
     coverFlow.setAnimationDuration(1000); 


     setContentView(coverFlow); 


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

     Button main1 = (Button) findViewById(R.id.button1); 
     main1.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       // fire intent 
       finish(); // finish current activity 
       Intent myIntent = new Intent(view.getContext(), 
         MainActivity.class); 
       startActivityForResult(myIntent, 0); 

      } 


     }); 

     Button main2 = (Button) findViewById(R.id.button2); 
     main2.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       // fire intent 
       finish(); // finish current activity 
       Intent myIntent = new Intent(view.getContext(), 
         MainbActivity.class); 
       startActivityForResult(myIntent, 0); 

      } 


     }); 

     coverFlow = (CoverFlow) findViewById(R.id.coverflow); 
     coverFlow.setAdapter(coverImageAdapter); 


    } 

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

     private FileInputStream fis; 

     private Integer[] mImageIds = { 
      R.drawable.tabletsplash, 
       R.drawable.tabletsplash2, 
       R.drawable.tabletsplash3, 
       R.drawable.tabletsplash4, 
       R.drawable.tabletsplash5, 
       R.drawable.tabletsplash, 
       R.drawable.tabletsplash2, 
       R.drawable.tabletsplash3, 
       R.drawable.tabletsplash4, 
       R.drawable.tabletsplash5, 
     }; 

     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 = 4; 


       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(300, 900)); 
      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))); 
      } 



    } 

    } 

回答

6

是基於對Gallery widget放在CoverFlow類?如果是這樣,您可以設置一個OnItemClickListener - 當您按下CoverFlow/Gallery中的某個項目時會被觸發。

這裏有一個簡單的例子:

coverFlow.setOnItemClickListener(new OnItemClickListener(){ 
    @Override 
    public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { 
    // Do something } 
    } 
); 

要啓動基於位置的活動:

if (arg2 == 0) { 
    startActivityForResult(new Intent(getApplicationContext(), ActivityA.class), 0); 
} else if (arg2 == 1) { 
    startActivityForResult(new Intent(getApplicationContext(), ActivityB.class), 0); 
} 
+0

呀它基於的畫廊部件。如果說我點擊tablwtsplash2去MainActivityb,我會如何設置它?我也可以爲每個圖像單獨點擊以進行不同的活動嗎?非常感謝 – PaulH 2012-02-03 09:03:51

+0

如果您想切換到另一個活動,只需用一個意圖啓動一個新的活動。無論如何 - 試試吧。這是它應該工作的方式。 – 2012-02-03 10:05:40

+0

我已經試過這樣:「coverFlow.setOnItemClickListener(新OnItemClickListener(){ \t \t @覆蓋 \t \t公共無效onItemClick(適配器視圖爲arg0,ARG1觀,詮釋ARG2,長ARG3){ \t \t \t //火意圖 \t光潔度(); //完成當前活動 \t意圖myIntent =新意圖(view.getContext(), \t \t \t MainbActivity.class); \t startActivityForResult(myIntent,0); 01 ) \t} \t});'' – PaulH 2012-02-03 18:32:45