Android-просмотр изображений для нескольких просмотров - PullRequest
1 голос
/ 08 января 2012

Вопрос: У меня есть класс с 300-400 просмотрами изображений.Класс реализует View.onClickListener.Могу ли я поместить изображения в какой-то массив или?Образы изображений настроены примерно так:

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

, и я не могу понять, как использовать их в onclick для класса.Я обычно использовал getId, но у них нет идентификатора, так как они не в XML.

Ответы [ 4 ]

1 голос
/ 08 января 2012
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
    }
}
0 голосов
/ 10 июня 2013

Когда вы создаете изображения, вы можете установить идентификатор динамически:

    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()) {

        }
    }
};
0 голосов
/ 08 января 2012

вы можете использовать теги для представления.

установить целочисленный тег для imageView

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

, а в onClickListener у вас есть ссылка на представление, по которому щелкают, вы можете решитькакое изображение щелкнуло с помощью

   int imageClicked = (int) clickedView.getTag();

. Сравните imageClicked, чтобы узнать, какое изображение было нажато.

0 голосов
/ 08 января 2012

Например, если 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 вы можете обрабатыватьтакже действие «переместить» и «перетащить».onTouch вызывается, пока вы находитесь над ImageView.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);
...