Reputation: 742
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
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
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
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