2012-05-03 8 views
1

変数または12の長さの画像のクリック可能なグリッドビューを生成したいとします。これは私がうまく管理しましたが、私はランダムに(リストから)重複ペア(6ペア)で画像(果物など)を選びたいと思います[クリックしたときに一致するサウンドを画像/ 。それらを配列に追加する必要がありますか?クリックすると、一致するサウンドをピクチャ/グリッドビューの位置に接続する必要があります。配列を使用してランダムに選択した画像をクリック可能なグリッドビューに追加する

このように配列を取り込むことはできますか?コマンドとは何ですか?例えばこの方法で配列1に追加できますか:

array1[n] = arraycontainingimages[randomnumbern]; 

?私の選択肢は何か、あるいは何が最良の方法ですか?ヌル配列を作成してイメージを追加できますか?どのコマンドで追加できますか? ArrayList()javaコマンドを使用して、(int index、Object要素)を追加する方が良いでしょうか。また、クリックしたグリッドビューから項目を削除する必要があります。

私はいくつかの方法で間違っているかもしれないいくつかのサンプルコードを持っています、私は初心者です。私が過度に複雑になっているなら、私に知らせてください。

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ファイルには、私は1件の記事であまりにも多くの質問をした

明らか
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

私は1件の記事であまりにも多くの質問をしました。私は改善に取り組んでいきます。 –

答えて

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..... 

をむしろ私が発見したように2つのArrayListを使用するよりも画像に音を一致させるために:

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

は、反対の記事があるにもかかわらず、同じシードを使用していても、両方のアレイで同じ順序を維持しませんでした。クリックでアイコンを変更するには

3私はちょうど画像を変更した後、グリッド全体をリフレッシュするので、私は問題を持っていた:

明らか
MyGridviewAdapter1.notifyDataChanged(); 
gridview.invalidateViews(); 
関連する問題