2016-09-28 2 views
0

저는 Gridview를 통해 151 장의 사진을 표시하는 Android 앱을 만들고 있습니다. 저는 151 개의 소리를 가지고 있으며 모든 소리를 하나의 이미지에 할당하려고합니다. 그래서 이미지에 두드리는 사운드를 재생할 수 있습니다. SoundPool을 사용하고 있습니다. 이 일을 어떻게 할 수 있을지에 대한 아이디어?Java에서 Gridview로 만든 요소에 SoundPool 객체를 어떻게 할당합니까?

package com.example.thefe.newsmartkedex; 

import android.media.AudioManager; 
import android.media.SoundPool; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.Toast; 

import static com.example.thefe.newsmartkedex.R.raw.pkmn1; 

public class MainActivity extends AppCompatActivity { 

    int pkmn1, pkmn2, pkmn3; 
    SoundPool mySoundPool = new SoundPool (1, AudioManager.STREAM_MUSIC, 0); 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pkmn1 = mySoundPool.load(this, R.raw.pkmn1, 1); 
     pkmn2 = mySoundPool.load(this, R.raw.pkmn2, 1); 
     pkmn3 = mySoundPool.load(this, R.raw.pkmn3, 1); 


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

     gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
           int position, long id) { 
       position += 1; //forget about this 
       Toast.makeText(MainActivity.this, "" + position, 
         Toast.LENGTH_SHORT).show(); 
       mySoundPool.play(/*???*/,1,1,1,0,1); 
      } 
     }); 
    }; 
} 

내 ImageAdapter 클래스는 다음과 같이 작동합니다

package com.example.thefe.newsmartkedex; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

import java.util.ArrayList; 

/** 
* Created by TheFe on 27/09/2016. 
*/ 

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public ImageAdapter(Context c, ArrayList list) { 
     mContext = c; 
    } 

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

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

    public long getItemId(int position) { 
     return 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(200, 200)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

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

    // references to our images 
    private Integer[] mThumbIds = { 
      R.drawable.pkmn1, R.drawable.pkmn2, 
      R.drawable.pkmn3, R.drawable.pkmn4, 
      R.drawable.pkmn5, R.drawable.pkmn6, 
      R.drawable.pkmn7, R.drawable.pkmn8, 
      R.drawable.pkmn9, R.drawable.pkmn10, 
      R.drawable.pkmn11, R.drawable.pkmn12, 
      R.drawable.pkmn13, R.drawable.pkmn14, 
      R.drawable.pkmn15, R.drawable.pkmn16, 
      R.drawable.pkmn17, R.drawable.pkmn18, 
      R.drawable.pkmn19, R.drawable.pkmn20, 
      R.drawable.pkmn21, R.drawable.pkmn22, 
      R.drawable.pkmn23, R.drawable.pkmn24, 
      R.drawable.pkmn25, R.drawable.pkmn26, 
      R.drawable.pkmn27, R.drawable.pkmn28, 
      R.drawable.pkmn29, R.drawable.pkmn30, 
      R.drawable.pkmn31, R.drawable.pkmn32, 
      R.drawable.pkmn33, R.drawable.pkmn34, 
      R.drawable.pkmn35, R.drawable.pkmn36, 
      R.drawable.pkmn37, R.drawable.pkmn38, 
      R.drawable.pkmn39, R.drawable.pkmn40, 
      R.drawable.pkmn41, R.drawable.pkmn42, 
      R.drawable.pkmn43, R.drawable.pkmn44, 
      R.drawable.pkmn45, R.drawable.pkmn46, 
      R.drawable.pkmn47, R.drawable.pkmn48, 
      R.drawable.pkmn49, R.drawable.pkmn50, 
      R.drawable.pkmn51, R.drawable.pkmn52, 
      R.drawable.pkmn53, R.drawable.pkmn54, 
      R.drawable.pkmn55, R.drawable.pkmn56, 
      R.drawable.pkmn57, R.drawable.pkmn58, 
      R.drawable.pkmn59, R.drawable.pkmn60, 
      R.drawable.pkmn61, R.drawable.pkmn62, 
      R.drawable.pkmn63, R.drawable.pkmn64, 
      R.drawable.pkmn65, R.drawable.pkmn66, 
      R.drawable.pkmn67, R.drawable.pkmn68, 
      R.drawable.pkmn69, R.drawable.pkmn70, 
      R.drawable.pkmn71, R.drawable.pkmn72, 
      R.drawable.pkmn73, R.drawable.pkmn74, 
      R.drawable.pkmn75, R.drawable.pkmn76, 
      R.drawable.pkmn77, R.drawable.pkmn78, 
      R.drawable.pkmn79, R.drawable.pkmn80, 
      R.drawable.pkmn81, R.drawable.pkmn82, 
      R.drawable.pkmn83, R.drawable.pkmn84, 
      R.drawable.pkmn85, R.drawable.pkmn86, 
      R.drawable.pkmn87, R.drawable.pkmn88, 
      R.drawable.pkmn89, R.drawable.pkmn90, 
      R.drawable.pkmn91, R.drawable.pkmn92, 
      R.drawable.pkmn93, R.drawable.pkmn94, 
      R.drawable.pkmn95, R.drawable.pkmn96, 
      R.drawable.pkmn97, R.drawable.pkmn98, 
      R.drawable.pkmn99, R.drawable.pkmn100, 
      R.drawable.pkmn101, R.drawable.pkmn102, 
      R.drawable.pkmn103, R.drawable.pkmn104, 
      R.drawable.pkmn105, R.drawable.pkmn106, 
      R.drawable.pkmn107, R.drawable.pkmn108, 
      R.drawable.pkmn109, R.drawable.pkmn110, 
      R.drawable.pkmn111, R.drawable.pkmn112, 
      R.drawable.pkmn113, R.drawable.pkmn114, 
      R.drawable.pkmn115, R.drawable.pkmn116, 
      R.drawable.pkmn117, R.drawable.pkmn118, 
      R.drawable.pkmn119, R.drawable.pkmn120, 
      R.drawable.pkmn121, R.drawable.pkmn122, 
      R.drawable.pkmn123, R.drawable.pkmn124, 
      R.drawable.pkmn125, R.drawable.pkmn126, 
      R.drawable.pkmn127, R.drawable.pkmn128, 
      R.drawable.pkmn129, R.drawable.pkmn130, 
      R.drawable.pkmn131, R.drawable.pkmn132, 
      R.drawable.pkmn133, R.drawable.pkmn134, 
      R.drawable.pkmn135, R.drawable.pkmn136, 
      R.drawable.pkmn137, R.drawable.pkmn138, 
      R.drawable.pkmn139, R.drawable.pkmn140, 
      R.drawable.pkmn141, R.drawable.pkmn142, 
      R.drawable.pkmn143, R.drawable.pkmn144, 
      R.drawable.pkmn145, R.drawable.pkmn146, 
      R.drawable.pkmn147, R.drawable.pkmn148, 
      R.drawable.pkmn149, R.drawable.pkmn150, 
      R.drawable.pkmn151 
    }; 
} 
+0

을이 같은 어댑터, onItemClick 당신 내부

GridView gridview = (GridView) findViewById(R.id.gridview); ImageAdapter adapter = new ImageAdapter(this, items); gridview.setAdapter(adapter); 

을 초기화? –

+0

res/drawable 폴더 안에 오디오가 있습니다. res/raw –

+0

모델 클래스가 있습니까? –

답변

0

이 이미지에 대한 참조 및 그와 관련된 사운드를 유지하는 모델 클래스를 만듭니다. 항목을 클릭하면 객체에 해당하는 객체를 가져 와서 참조를 사용하여 SoundPool 객체를로드하고 재생합니다.

public class Item { 

    int imageId; 
    int soundID; 

    public Item(int imageId, int soundID){ 
     this.imageId = imageId; 
     this.soundID = soundID; 
    } 

    public int getImageId() { 
     return imageId; 
    } 

    public void setImageId(int imageId) { 
     this.imageId = imageId; 
    } 

    public int getSoundID() { 
     return soundID; 
    } 

    public void setSoundID(int soundID) { 
     this.soundID = soundID; 
    } 
} 

항목의 목록을 작성

,
List<Item> items = new ArrayList<Items>(); 
for(int i = 0; i < 10; i++) { 
    items.add(new Item(R.drawable.your_image_id, R.raw.your_sound_id)); 
} 

는 어댑터에이 목록을 전달합니다. ImageAdapter의 생성자를 수정해야합니다. 당신의 이미지는

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

     Item selectedItem = items.get(position); 
     int soundID = selectedItem.getSoundID(); 
     pkmn1 = mySoundPool.load(MainActivity.this, soundID, 1); 
     mySoundPool.play(pkmn1, 1, 1, 1, 0, 1); 
    } 
}); 
+0

고맙습니다. 훌륭한 대답입니다. 집에 돌아 가면 나중에 사용해 보겠습니다. –

+0

좋아요, 몇 가지 문제가 있습니다. 어젯밤 이후로 작업 중이며 몇 가지 질문이 있습니다. (용서하십시오. 아직 배우고 있습니다.) 우선, "getSoundID() 메소드를 해결할 수 없습니다. 그것을 해결하기 위해. 둘째, Item.Last 클래스에서 getter와 setter를 쓴 곳을 무엇에 집어 넣어야하는지 이해하지 못했습니다.로드 옵션을 수행 할 때 오류가 발생합니다. 이는 "this"를 사용할 수 없다는 것을 사람들에게 알려줍니다. 형식이 잘못되었습니다 (AdapterView.OnClickListener에서 주어진 상황이 예상됩니다.) ... –

+0

수정 내용 확인 –

관련 문제