如何在水平ScrollView中为图像制作单击侦听器

时间:2016-06-25 19:05:16

标签: android

我正在制作水平滚动视图以在Android应用中显示图像。但我不知道如何为每个单独的图像制作点击监听器。我的代码是

    private Integer images[] = {R.drawable.mba, R.drawable.lifestylemin, 
R.drawable.jee,R.drawable.comic,R.drawable.defence};
// private ReaderView mReader;
// ImageView imageGallery;
LinearLayout im1;
LinearLayout imageGallery;
LinearLayout imageGallery2;
ImageView imageView;
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {

    View view=inflater.inflate(R.layout.tab2, container, false);
    // init PlugPDF
    LinearLayout adcat=(LinearLayout)view.findViewById(R.id.adcat);
    adcat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(getActivity(),ebookSelection.class));
        }
    });

     imageGallery = (LinearLayout) view.findViewById(R.id.imageGallery);
    imageGallery2 = (LinearLayout) view.findViewById(R.id.imageGallery2);
    addImagesToThegallery();

 //edit code
    for(int i=0;i<images.length;i++){
    final ImageView imageView = (ImageView) getImageView(images[i]);
    imageView.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent i=new Intent(getActivity(),book.class);
        int id=imageView.getId();
        i.putExtra("id",id);
        startActivity(i);
    }
   });
   }
 ////
    return view;
}
private void addImagesToThegallery() {

    for (Integer image : images) {
        imageGallery.addView(getImageView(image));
        imageGallery2.addView(getImageView(image));
    }
}


private View getImageView(Integer image) {
    ImageView imageView = new  
  ImageView(getActivity().getApplicationContext());
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(260, 400);
    lp.setMargins(0, 0, 10, 0);

    imageView.setLayoutParams(lp);
    imageView.setImageResource(image);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    return imageView;
}

我想为每个图像制作单独的点击监听器,以便我可以从不同的图像执行不同的尝试。 提前完成。

4 个答案:

答案 0 :(得分:3)

您还可以在getImageView方法

上设置OnClickListener

编辑:使用ImageResource在imageView上添加TAG,然后在图像OnClick方法上恢复TAG,像这样:

private View getImageView(Integer image, Integer index) {
    ImageView imageView = new
            ImageView(this.getApplicationContext());
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(260, 400);
    lp.setMargins(0, 0, 10, 0);

    imageView.setLayoutParams(lp);
    imageView.setImageResource(image);
    //Create a TAG on your Strings Resources
    //"IMAGE_TAG" with any value
    imageView.setTag(R.string.IMAGE_TAG, image);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    imageView.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            int image = (int)v.getTag(R.string.IMAGE_TAG);
            switch (image)
            {
                case R.drawable.mba:
                {
                    //action for your image
                } break;
                //and so on..

            }
        }
    });

    return imageView;
}

答案 1 :(得分:2)

您希望在ImageView上为每个图像调用setOnClickListener。

您可以在getImageView方法中执行此操作,并根据您传递给方法的图像索引具有不同的行为,或者您可以从for循环中调用以下内容。

ImageView imageView = (ImageView) getImageView(i); 
imageView.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
         // Perform action on click
     }
 });

答案 2 :(得分:1)

您可以为for循环中的每个视图设置onClick侦听器,或者只是在您已创建的侦听器中使用view.getId方法并相应地执行操作。

答案 3 :(得分:1)

尝试在Activity / Fragment

中添加此内部类
class ImageClickListener implements View.OnClickListener {

public void onClick(View v) {
    switch(v.getId()) {
        case images[0]:
            // handle click for first image
        break;
            //And so on and so forth
    }


}

然后只需在每个ImageView的循环内设置单击侦听器

for (Integer image : images) {
    ImageView image1 = getImageView(image);
    ImageView image2 = getImageView(image);
    image1.setOnClickListener(new ImageClickListener());
    image2.setOnClickListener(new ImageClickListener());
    imageGallery.addView(image1);
    imageGallery2.addView(image2);
}