2012-02-02 59 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