针对多个视图的Android imageview onclick

时间:2012-01-08 13:29:55

标签: android arrays onclick imageview

问题:我有一个有300-400图像视图的课程。该类实现了View.onClickListener。我可以将图像视图放在某种数组中吗? 图像视图设置类似于

ImageView IM1 = new ImageView(this);  
IM1.setImageResource(R.drawable.have_fun);

我无法理解如何在课程的onclick中使用这些。我通常使用getId但是这些没有id因为它们不在xml中。

4 个答案:

答案 0 :(得分:1)

ArrayList<ImageView> imageViews = new ArrayList<ImageView>();
imageViews.add(IM1);
// add others ...
for(ImageView imgView : imageViews){
    IM1.setOnClickListener(this);
}

在onClick方法中,您可以将View v与ImageViews进行比较,以决定要做什么。

public void onClick(View v){
    if((ImageView)v == IM1){
        // do something
    }
}

答案 1 :(得分:0)

例如,如果IM1是您的ImageView,那么:

IM1.setOnTouchListener(new View.OnTouchListener(){
    public boolean onTouch(View v, MotionEvent event){
        /*your code here*/
        return true;
    }
});

或者,如果您只想处理onClick,那么

IM1.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
        /*your code here*/
    }
});

区别在于,使用onTouch事件,您还可以处理“移动”和“拖动”操作。用手指在ImageView上调用onTouch。 onClick - 只有你点击一次。

或者您可以创建另一个实现OnClickListener接口的类,例如:

public class TouchController implements OnClickListener{

    /*any code that you need*/

    public void onClick(View v){
        /*your code*/
    }
}

然后

TouchController controller = new TouchController();
IM1.setOnClickListener(controller);

答案 2 :(得分:0)

您可以为视图使用标记。

为imageView

设置整数标记
ImageView IM1 = new ImageView(this);  
IM1.setImageResource(R.drawable.have_fun);
IM1.setTag(1);

并且在onClickListener中,您引用了单击的视图,您可以决定使用

单击哪个图像
   int imageClicked = (int) clickedView.getTag();

比较imageClicked以了解所点击的图片。

答案 3 :(得分:0)

创建图像时,您可以动态设置ID:

    for (int i = 0; i < listImages.size(); i++) {
        final ImageView image = listImages.get(i);
        image.setImageResource(R.drawable.have_fun);
        image.setId(i);
    }

然后在你的onClick方法中你可以做到:

OnClickListener onClick = new OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()) {

        }
    }
};