1

I am swiping my images using viewflipper class in android.I have image array. Now each image have their own functionality.For Example 1st image should take me to another activity and similarly others. What i want to do is to make click listener of each image so that i can perform different tasks according to the image. Here is my code:

public class gesture extends AppCompatActivity {
private ViewFlipper mViewFlipper;
private GestureDetector mGestureDetector;
MediaPlayer mp;
int i;
int a=0;
ImageView imageView;

int[] image = {
        R.drawable.p1,
        R.drawable.p2,
        R.drawable.p3,
        R.drawable.p4,
        R.drawable.p5,
        R.drawable.p6
};
int[] audio={
        R.raw.p1,
        R.raw.p2,
        R.raw.p3,
        R.raw.p4,
        R.raw.p5,
        R.raw.p6

};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gesture);
    CustomGestureDetector customGestureDetector = new CustomGestureDetector();
    mGestureDetector = new GestureDetector(this, customGestureDetector);


    // Get the ViewFlipper
    mViewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);


    if (mp != null) {
        mp.stop();
        mp.release();
    }
    mp = MediaPlayer.create(gesture.this, audio[a]);
    mp.start();


    // Add all the images to the ViewFlipper
    for (i = 0; i < image.length; i++) {
        imageView = new ImageView(this);

        imageView.setImageResource(image[i]);
        mViewFlipper.addView(imageView);

           }


}

class CustomGestureDetector extends GestureDetector.SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        // Swipe left (next)
        if (e1.getX() > e2.getX()) {

            if (mp != null) {
                mp.stop();
                mp.release();
            }


                a++;
            if (a==6){
                a=0;
            }
                mp = MediaPlayer.create(gesture.this, audio[a]);
                mp.start();
                mViewFlipper.showNext();


        }

        // Swipe right (previous)
        if (e1.getX() < e2.getX()) {

            if (mp != null) {
                mp.stop();
                mp.release();
            }

            a--;
            if(a==-1){
                a=5;
            }
                mp = MediaPlayer.create(gesture.this, audio[a]);
                mp.start();
                mViewFlipper.showPrevious();



        }

        return super.onFling(e1, e2, velocityX, velocityY);


    }

}
@Override
public boolean onTouchEvent(MotionEvent event) {
    mGestureDetector.onTouchEvent(event);

    return super.onTouchEvent(event);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return false;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.

    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return false;
    }
    return super.onOptionsItemSelected(item);
}

Thanks in advance.

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Uzair Qaiser
  • 156
  • 1
  • 11

2 Answers2

2

First implement OnClickListener in your activity

public class gesture extends AppCompatActivity implements View.OnClickListener {

then give an id to each of the images

for (i = 0; i < image.length; i++) {
    imageView = new ImageView(this);

    imageView.setImageResource(image[i]);
    imageView.setId(i); // <---- assigning id
    mViewFlipper.addView(imageView);

}

Finally, handle the clicks:

@Override
public void onClick(View v) {
   Class<?> c = null;
   int imageId = v.getId();

   try {
       c = Class.forName("ActivityToStartOn"+imageId);
   } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
   }
   Intent intent = new Intent(gesture.this, c);
   startActivity(intent);

}

NOTE: I'm assuming the activities you want to start are named ActivityToStartOn0, ActivityToStartOn1, ....

mrid
  • 5,782
  • 5
  • 28
  • 71
1

This is late to answer this question but this might help someone, viewFlipper.getChildAt(i).setOnClickListener() worked for me:

Below is the examlpe of my working code:

            for (int i = 0; i < room.getImages().size(); i++) {
                ImageView image = new ImageView(RoomDetailActivity.this);
                image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                Picasso.get().load(room.getImages().get(i)).into(image);
                viewFlipper.addView(image);
                final int temp = i;
                viewFlipper.getChildAt(i).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(RoomDetailActivity.this,room.getImages().get(temp), Toast.LENGTH_SHORT).show();
//                        Intent intent = new Intent(RoomDetailActivity.this,PhotoZoomViewActivity.class);
//                        intent.putExtra("url",room.getImages().get(temp));
//                        startActivity(intent);
                    }
                });
            }
iamnabink
  • 454
  • 9
  • 27