2012-05-03 2 views
1

Я хочу создать интерактивное изображение сетки с изображениями любой переменной или длиной 12. Мне это удалось, но я хочу выбрать изображения (фрукты или что-то еще) в двойных парах (6 пар) наугад (из списка) [Мне также нужно подключить соответствующие звуки к изображению/позиции сетки для того, когда они будут нажаты] , Должен ли я добавить их в массив? Мне нужно соединить соответствующие звуки с позициями изображения/сетки, когда они будут нажаты.Использование массива для добавления случайно выбранных изображений в интерактивный gridview

Могу ли я заполнить массив таким образом? Какая команда? например могу ли я добавить в свой массив 1 следующим образом:

array1[n] = arraycontainingimages[randomnumbern]; 

? Каковы мои варианты или что является лучшим способом? Могу ли я создать нулевой массив, а затем добавить изображения? Какая команда может их добавить? Мне лучше использовать команду ArrayList() java, а затем добавить (int index, Object element). Мне также нужно удалить элемент из gridview после щелчка.

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

public class MyImageAdapterFruit1 extends BaseAdapter { 

int Totalfruit = 12; // this means there are 6 pairs of fruit to select 
int fruitstilltoadd = Totalfruit; 
int ftaddcnt = 1; 
int puthere = 1; 
int counttotwo; 

private Context mContext; 

public MyImageAdapterFruit1(Context c) { 
    mContext = c; 
} 

public int getCount() { 
    return filenames.length; 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

// Create array to reference images later 
public Integer [] displayfruit = { 
     R.drawable.blank, 
     R.drawable.fruit1, R.drawable.fruit2, R.drawable.fruit3, 
     R.drawable.fruit4, R.drawable.fruit5, R.drawable.fruit6, 
     R.drawable.fruit7, R.drawable.fruit8, R.drawable.fruit9, 
     R.drawable.fruit10, R.drawable.fruit11, R.drawable.fruit12, 
}; 

// Create blank array to be populated randomly later - is this right/ok? 
private Integer [] filenames; 

// CONSIDER USING public void ArrayList (int capacity) {} here instead 

//public void whyiseclipseaddingthis()  // Don't know why eclipse is adding this bit--------Fill (filenames) array randomly with 6 images in duplicate 

{ 
while (fruitstilltoadd > 0) { 

// select Fruittoaddtoarray - the following creates a random number (temprand) between 1 and 12 (if 12 is the total no. of fruit) 
// use this to randomly select fruit to add to the array 
    int restartfruitselection = 0; 
    int minr = 1; 
    int maxr = (Totalfruit + 1); 
    Random temprand = new Random(); 
    int Fruittoaddtoarray = temprand.nextInt(maxr - minr + 1) + minr; 
// end "select Fruittoaddtoarray" 

    // Now check if Fruittoaddtoarray already in array named "filenames" 
    for (ftaddcnt = 1; ftaddcnt <= Totalfruit; ftaddcnt++) { 
     if (filenames[Fruittoaddtoarray] == filenames[ftaddcnt]) { 
      restartfruitselection = 1; break; 
      //if already in array then start over selecting new fruit else continue    
     } 

    if (restartfruitselection == 0) { 
    // new fruit has been selected successfully so lets add it TWICE to random positions 
     counttotwo =1; 
     while (counttotwo <= 2) { 

      minr = 1; 
      maxr = (Totalfruit + 1); 
      temprand = new Random(); 
      int Puthere = temprand.nextInt(maxr - minr + 1) + minr; 
      // end selection of random Puthere 

      //if Puthere location is empty then add fruit to that position in the array ... 
      // ...otherwise select a different place to put the fruit and re-test  
      if (filenames[Puthere] == null) { 
       filenames[Puthere] = displayfruit[Fruittoaddtoarray]; 
       counttotwo++; 
       fruitstilltoadd--; 

      } 
     } 
    }  
} 
}} 

int Fruitleft = 0;   

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { // if it's not recycled, initialize some attributes 
     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(8, 8, 8, 8); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    imageView.setImageResource(filenames[position]); 
    return imageView; 
} 

} 

Благодарим за помощь. Любая помощь в любой момент приветствуется.

PS Мой файл gameonemainscreen.java является

GridView gridview = (GridView) findViewById(R.id.gridView); 
    gridview.setAdapter(new MyImageAdapterFruit1(this)); 

    gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      SoundManager.playSound(2, 1);  
      Toast.makeText(game1mainscreen.this, "" + position, Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 

}

+0

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

ответ

0

Очевидно, что я спросил слишком много вопросов в одном посте. Больше не повторится. Короткими ответами являются:

1 Я использовал arraylist вместо массива, поскольку вы не можете изменить массив. Я выгружена изображения в моей ArrayList следующим образом:

myarraylist.set(position, R.drawable.newimage); //swap for new image 
myarraylist.remove(0); //remove first int (image) from array 

FruitToChooseFromImages = new ArrayList<Integer>(); 
FruitToChooseFromImages.add(R.drawable.image1); 
FruitToChooseFromImages.add(R.drawable.image2); // etc to add images to the arraylist 

2 Я использовал:

switch (switchused) { 
    case R.drawable.fruit0: 
      soundtoplay = 0; 
      break; 
etc..... 

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

Collections.shuffle(intarraylistofimages, shufflevalueSeed); 
Collections.shuffle(intarraylistofnames, shufflevalueSeed); 

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

3 Чтобы изменить значок по щелчку меня были проблемы, так что я просто обновил всю сетку после изменения изображения:

MyGridviewAdapter1.notifyDataChanged(); 
gridview.invalidateViews(); 
Смежные вопросы