2016-08-04 3 views
0

Я создал в своем макете два ImageViews, назовем их imageviewTop и imageviewBottom.
Я сохранил два изображения в drawable (green_image.png и red_image.png).
Я также добавил кнопку и хочу, чтобы я хотел бы сделать это, когда нажата кнопка, один из ImageViews будет выбран случайным образом, а с green_image он будет изменен на red_image.Случайно выберите один из двух ImageViews и обновите ResourceImage

Я уже пробовал с созданием оператора switch/case и генерировал случайное число, например 1 или 2.
На основании этого номера оператор case обновил бы верхнее или нижнее изображение.
Это нормально работает для 2 ImageViews, но в случае, если у меня будет 100, мне нужно будет создать 100 случаев в коде.
Я ищу более динамичный вариант.

Я знаю, как обновить изображение для ImageView, я борюсь с частью, о том, как выбрать один ImageView случайным образом, если это возможно.

Вот код:

public class MainActivity extends Activity { 

    ImageView imagevieTop, imageviewBottom; 
    Button randomButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     imagevieTop = (ImageView) findViewById(R.id.imageViewTop); 
     imageviewBottom = (ImageView) findViewById(R.id.imageViewBottom); 
     randomButton = (Button) findViewById(R.id.buttonRandom); 

     randomButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // randomly select one of the two imageviews 
       // for example: randomly selected imageviewTop 
       // set imageresource red_image to imageviewTop 

       //at next start up it would select either top or bottom, 50%-50% and then assign the image to it 
      } 
     }); 
    } 
} 
+0

Почему вы просто не произвольно генерируете координату ImageView и изображение внутри него? OR Вы можете просто написать код как int a = new Random(). NextInt (100); x = (x - x% 4)/4 * multiple; y = x% 4 * multiple; imgId = a; затем просто установите координаты и изображение изображений –

+0

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

ответ

0

Вы можете использовать только один ImageView и рандомизации картину вы рисуете.

В качестве альтернативы вы можете настроить это, чтобы использовать массив ImageViews. Твой выбор.

Нужная вам линия - это int index = random.nextInt(imgs.length);, чтобы получить случайный индекс из списка.

public class MainActivity extends Activity { 

    int[] imgs = new int[] { R.drawable.green_image, R.drawable.red_image }; 
    Button randomButton; 

    private final Random random = new Random(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ImageView imgView = (ImageView) findViewById(R.id.imageView); 
     randomButton = (Button) findViewById(R.id.buttonRandom); 

     randomButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int index = random.nextInt(imgs.length); 

       // randomly select one of the two drawables 
       int resId = imgs[index]; 

       // set imageresource imgView 
       Drawable d = getResources().getDrawable(resId); 
       imgView.setImageDrawable(d); 

      } 
     }); 
    } 
} 

Чтобы справиться с этой проблемой «100 ImageViews», я бы рекомендовал не копировать 100 строк кода, и вместо цикла по разумным значениям ID.

List<ImageView> imgViews = new ArrayList<ImageView>(); 
for (int i = 0; i < 100; i++) { 
    int resId = getResources().getIdentifier("imgView" + i, "id", getPackageName()); 
    ImageView nextImg = (ImageView) findViewById(resId); 
    imgViews.add(nextImg); 
} 
+0

Спасибо за ответ, я проверю прямо сейчас, если он работает, вместе с ответом ниже я мог бы создать ArrayList, пропустить его, а затем случайным образом выбрать один и обновить. Откроется обратная связь через несколько минут. – Gexo

+0

Он отлично работал вместе с ответом josemgu91, с выбором случайного изображения. Спасибо за помощь! – Gexo

0

В случае, если вы хотите сделать динамический выбор «п» ImageView элементов, то вам необходимо хранить их в структуре данных (например, массив, список и т.д.). Например, этот код будет выбрать случайный ImageView из списка:

public ImageView getRandomImageView(final List<ImageView> imageViewList) { 
     final Random random = new Random(); 
     //The "nextInt" method works in the half-open range [0, n), so it'll never be equal to the list size. 
     final int randomElement = random.nextInt(imageViewList.size()); 
     return imageViewList.get(randomElement); 
    } 

В вашем случае, с двумя ImageView в («imagevieTop» и «imageviewBottom»), объявленной в фиксированных переменных, то вам нужно будет передать их в список или что-то подобное, чтобы выбрать один из них динамически.

+0

Спасибо за ваш ответ, я пробую его вместе с ответом сверху/снизу. – Gexo

+0

Спасибо за помощь, это сработало. Я использовал код, чтобы заполнить ArrayList изображениями, предоставленными cricket_007, а затем использовал ваш, чтобы выбрать один из них случайным образом и обновлен. Благодаря! – Gexo

+0

Без проблем, рад помочь вам =). – josemgu91

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

  • Нет связанных вопросов^_^