kggoh
kggoh

Reputation: 742

Dynamically create imageView in ViewFlipper getting imageView id

I have dynamically created imageView in my ViewFlipper and it runs smoothly. However, when I want to click the image I need to do an enlargement of the image and do something with it. How do i get the id. I need to be able to differentiate which image i have clickeded.

Thanks in advance.

    public class Home_Fragment extends Fragment{

.....

   private ViewFlipper vf;

    int gallery_grid_Images[]={R.drawable.a,R.drawable.b,R.drawable.c,
            R.drawable.d};

  private void setFlipperImage(int res) {
        //Log.i("Set Filpper Called", res+"");
        ImageView image = new ImageView(getActivity());



        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 
                LayoutParams.MATCH_PARENT);
        image.setLayoutParams(lp);

        image.setAdjustViewBounds (true);
        image.setScaleType(ScaleType.CENTER_INSIDE);
        image.setClickable(true);

        image.setBackgroundResource(res);

        image.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                int id=(Integer) v.getTag();     //---> This will crash if i click the image
                //Toast.makeText(getActivity(), id+"", Toast.LENGTH_LONG).show();

            }
        });


        vf.setTag(res);

        vf.addView(image);
    }

Upvotes: 2

Views: 4030

Answers (3)

kggoh
kggoh

Reputation: 742

To post my research, I am able to know which image I clicked. image.setId(tagNum); tagNum running from 0 to max number of imageView i created-1. when clicked, the number is shown correctly in log. I can use that number to find the image source in my array.

private void setFlipperImage(int res, int tagNum) {

    ImageView image = new ImageView(getActivity());
    LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 
            LayoutParams.MATCH_PARENT);
    image.setLayoutParams(lp);

    image.setAdjustViewBounds (true);
    image.setScaleType(ScaleType.CENTER_INSIDE);
    image.setClickable(true);
    image.setBackgroundResource(res);
    image.setId(tagNum);

    image.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            //vf.getTag(key);

            int id = vf.getCurrentView().getId();

            Log.d("Value id", Integer.valueOf(id).toString());



        }
    });

   // vf.setTag(res);
    vf.addView(image);
}

Upvotes: 1

MFP
MFP

Reputation: 1141

Below code i have used for viewflipper for sliding image.you can add onclick event of image inside forloop.

SlideShowActivity.java

package com.example.viewpagerexample;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class SlideShowActivity extends Activity {

private ViewFlipper myViewFlipper;
private float initialXPoint;
int[] image = { R.drawable.one_full, R.drawable.two_full,
    R.drawable.three_full, R.drawable.four_full, R.drawable.five_full,
    R.drawable.six_full, R.drawable.seven_full, R.drawable.eight_full,
    R.drawable.nine_full, R.drawable.ten_full };

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.slide_show);
myViewFlipper = (ViewFlipper) findViewById(R.id.myflipper);

for (int i = 0; i < image.length; i++) {
    ImageView imageView = new ImageView(SlideShowActivity.this);
    imageView.setImageResource(image[i]);
    myViewFlipper.addView(imageView);
    imageView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
       // your code
   }});
} 

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
    initialXPoint = event.getX();
    break;
case MotionEvent.ACTION_UP:
    float finalx = event.getX();
    if (initialXPoint > finalx) {
        if (myViewFlipper.getDisplayedChild() == image.length)
            break;
        myViewFlipper.showNext();
    } else {
        if (myViewFlipper.getDisplayedChild() == 0)
            break;
        myViewFlipper.showPrevious();
    }
    break;
}
return false;
}
}

Here the images are only changing while user is swipe.

If you want to swipe automatically with certain interval add the following code.

myViewFlipper.setAutoStart(true);
myViewFlipper.setFlipInterval(3000);
myViewFlipper.startFlipping();

Upvotes: 5

Rashad
Rashad

Reputation: 11197

Why don't you use image.setTag(). Set an unique tag for each imageView and onClick get that tag and determine which imageView you clicked.

int id=(Integer) v.getTag(); 

The above line crashes may be its getting null.

Hope this helps. :)

Upvotes: 0

Related Questions