2016-04-19 3 views
1

В настоящее время у меня есть 8 кнопок изображения, настроенных с идентификатором imageButton1 в imageButton8.Android Studio: Итерация через изображения в drawable для onClick imageButton

Когда я нажимаю на определенную кнопку (например, imageButton2), я хочу прокрутить мои изображения в папке с рисунком с именем image1 .... image10 и установить изображение в файл изображения для каждого щелчка.

Я рассматривал различные циклы для решения этой проблемы, но там они никуда не вели. Вот фрагмент а при попытке петли:
ОБНОВЛЕНО 26/4/16
решаемые

//UPDATED 25/4/16 
ImageButton btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8; 
ImageButton[] btns; 
int[] drawables = new int[]{R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image8}; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    btn1 = (ImageButton) findViewById(R.id.imageButton1); 
    btn2 = (ImageButton) findViewById(R.id.imageButton2); 
    btn3 = (ImageButton) findViewById(R.id.imageButton3); 
    btn4 = (ImageButton) findViewById(R.id.imageButton4); 
    btn5 = (ImageButton) findViewById(R.id.imageButton5); 
    btn6 = (ImageButton) findViewById(R.id.imageButton6); 
    btn7 = (ImageButton) findViewById(R.id.imageButton7); 
    btn8 = (ImageButton) findViewById(R.id.imageButton8); 

     btn1.setOnClickListener(this); 
     btn2.setOnClickListener(this); 
     btn3.setOnClickListener(this); 
     btn4.setOnClickListener(this); 
     btn5.setOnClickListener(this); 
     btn6.setOnClickListener(this); 
     btn7.setOnClickListener(this); 
     btn8.setOnClickListener(this); 
} 


btns = new ImageButton[]{btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8}; 
} 

int counter = 0; 
     @Override 
    public void onClick(View v) 
     { 

      counter ++; 


      for (int i = 0; i < btns.length; i++) 
      { 


       if (v.getId() == btns[i].getId()) 
       { 
        if(counter ==8) 
        { 
         counter =0; 
        } 

         ((ImageButton)v).setImageResource(drawables[counter]); 

       } 

      } 
} 
} 

ОБНОВЛЕНО 26/4/16 решаемые

Еще одна попытка была создать счетчик, чтобы сохранить количество кликов и установить, если операторы изменяют изображения в соответствии с каждым щелчком.

Проблема здесь заключалась в создании большого количества кода, учитывая, что у меня есть несколько кнопок.

Кроме того, когда я запускаю это на двух разных кнопках, как только я нажимаю на imageButton1 несколько раз, то imageButton2 несколько раз, imageButton1 больше не отвечает.

int counter =0; 

     @Override 
    public void onClick(View v) 
     { 
      counter++; 


      switch(v.getId()) 
      { 
       case R.id.imageButton1: 
        if(counter == 1){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image1); 
         break; 

        }else if (counter == 2){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image2); 
         break; 

        }else if (counter == 3){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image3); 

         break; 

        }else if (counter == 4){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image4); 

         break; 
        }else if (counter == 5){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image5); 
         break; 

        }else if (counter == 6){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image6); 

         break; 

        }else if (counter == 7){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image7); 

         break; 
        }else if (counter == 8){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image8); 
         break; 

        }else if (counter == 9){ 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image9); 

         break; 

        }else if (counter == 10) { 

         ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
         btn1.setImageResource(R.drawable.image10); 
         counter = 0; 
         break; 
        } 
        break; 

Я был бы признателен за любые рекомендации, между тем, если я разрешу эту проблему, я отправлю Редактировать. Приветствия

ответ

0

Просто предложение.

Возможно, вы могли бы объявить кнопки и ресурсы изображения в виде массивов, а затем прокручивать их.

Например:

public class Sample extends Activity { 

    ImageButton btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8; 
    ImageButton[] btns; 
    int[] drawables = new int[]{R.drawable.imageButton1,R.drawable.imageButton2,R.drawable.imageButton3,R.drawable.imageButton4,R.drawable.imageButton5,R.drawable.imageButton6,R.drawable.imageButton7,R.drawable.imageButton8}; 
    int[] origDrawables = new int[]{R.drawable.imageOrigButton1,R.drawable.imageOrigButton2,R.drawable.imageOrigButton3,R.drawable.imageOrigButton4,R.drawable.imageOrigButton5,R.drawable.imageOrigButton6,R.drawable.imageOrigButton7,R.drawable.imageOrigButton8}; 

    @Override 
    public void onCreate(Bundle saveInstanceState) { 
    btn1 = (ImageButton) findViewById(R.id.imageButton1); 
    btn2 = (ImageButton) findViewById(R.id.imageButton2); 
    btn3 = (ImageButton) findViewById(R.id.imageButton3); 
    btn4 = (ImageButton) findViewById(R.id.imageButton4); 
    btn5 = (ImageButton) findViewById(R.id.imageButton5); 
    btn6 = (ImageButton) findViewById(R.id.imageButton6); 
    btn7 = (ImageButton) findViewById(R.id.imageButton7); 
    btn8 = (ImageButton) findViewById(R.id.imageButton8); 

    btn1.setOnClickListener(this); 
    btn2.setOnClickListener(this); 
    btn3.setOnClickListener(this); 
    btn4.setOnClickListener(this); 
    btn5.setOnClickListener(this); 
    btn6.setOnClickListener(this); 
    btn7.setOnClickListener(this); 
    btn8.setOnClickListener(this); 

    btns = new ImageButton[]{btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8}; 
    } 

    @Override 
    public void onClick(View v) { 
    for (int i = 0; i < btns.length; i++) { 
     if (v.getId == btns[i].getId) { 
     ((ImageButton)v).setImageResource(drawables[i]); 
     } else { 
     ((ImageButton)v).setImageResource(origDrawables[i]); 
     } 
    } 
    } 

} 

Примечание: Помилование ошибки код/​​синтаксис, как я сделал это с помощью блокнота.

+0

Я уже пробовал что-то подобное, но появляется ошибка. Не удается разрешить «setImageResource (int)». – Steven

+0

обновил мой ответ , вы можете попробовать сейчас. – ank

+0

Обновлен мой ответ с этим »((ImageButton) v) .setImageResource (drawables [i]);". Я думаю, что причина ошибки «Не удается решить» - это потому, что объект View не имеет этого. Поэтому нам может потребоваться передать его в ImageButton, чтобы получить метод. – ank

-1

Попробуйте

int counter = 1; 
    @Override 
    public void onClick(View v) 
    { 
     switch(v.getId()) 
     { 
      case R.id.imageButton1: 
      ImageButton btn1 = (ImageButton) findViewById(R.id.imageButton1); 
       if(counter == 1){ 
        btn1.setImageResource(R.drawable.image1); 
       }else if (counter == 2){ 
        btn1.setImageResource(R.drawable.image2); 
       }else if (counter == 3){ 
        btn1.setImageResource(R.drawable.image3); 
       }else if (counter == 4){ 
        btn1.setImageResource(R.drawable.image4); 
       }else if (counter == 5){ 
        btn1.setImageResource(R.drawable.image5); 
       }else if (counter == 6){ 
        btn1.setImageResource(R.drawable.image6); 
       }else if (counter == 7){ 
        btn1.setImageResource(R.drawable.image7); 
       }else if (counter == 8){ 
        btn1.setImageResource(R.drawable.image8); 
       }else if (counter == 9){ 
        btn1.setImageResource(R.drawable.image9); 
       }else if (counter == 10) { 
        btn1.setImageResource(R.drawable.image10); 
       } 

      counter = (counter % 10) + 1 ; 
       break; 
    } 
+0

?? Вы делаете это неправильно ... Наличие всех этих 'if ... else' внутри коммутатора неверно. Сначала проверьте кнопку с 'if', затем установите переключатель внутри. – CaptJak

+0

@CaptJak Это проблема? Почему я не могу положить 'if..else' внутри' switch'? – jgm

+0

Это можно сделать, это сработает, но если вы делаете это так, почему вы используете переключатель? Почему вы используете 'if ... else'? Почему бы вам просто не использовать одно или другое? По соображениям производительности вы должны использовать переключатель. См.: Https://stackoverflow.com/questions/6705955/why-switch-is-faster-than-if – CaptJak

Смежные вопросы