마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 사진 마다 소리 다르게 하기

0 추천

사진을 배열에 넣었습니다. 

private int image[]= {R.drawalbe.사자, R.drawalbe.고양이, R.drawalbe.강아지, R.drawalbe.닭}

private int index =0 

//소리 버튼
findViewById(R.id.SoundButton).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    if (index==0){      //사자 소리
        //앞 숫자는 노래목록, 뒤의 숫자는 속도
        SoundManager.playSound(1, 1);
    } else if (index==1){       //고양이 소리
        SoundManager.playSound(2, 1);
    }else if (index==2){        //강아지소리
        SoundManager.playSound(3, 1);
    }else {         //닭소리
        SoundManager.playSound(4, 1);
    }
//동물 체인지 버튼
findViewById(R.id.change).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (index < leftimage.length) {
            ImageView.setImageResource(image[index]);
            ++index;
        }else {
            index =0;
            ImageView.setImageResource(image[0]);
            index++;
        }
    }
});

 

이렇게 만들었는데 지금 소리 매치가 안됩니다.. 강아지한테 고양이 소리가 나고 그러는데

도와주세요ㅜㅜ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

개발개발자 (1,100 포인트) 님이 2021년 1월 8일 질문

3개의 답변

0 추천

데이터 구조를 좀 변경해 보세요.

public enum AnimalType {
    LION(R.drawalbe.사자, 1, 1, AnimalType.CAT),
    CAT(R.drawalbe.고양이, 2, 1, AnimalType.DOG),
    DOG(R.drawalbe.강아지, 3, 1, AnimalType.CHICKEN), 
    CHICKEN(R.drawalbe.닭, 4, 1, AnimalType.LION);

    private final int drawableResId;
    private final int songIndex;
    private final int playSpeed;
    private final AnimalType next;

    public AnimalType(int drawableResId, int songIndex, int playSpeed, AnimalType next) {
        this.drawableResId = drawableResId;
        this.songIndex = songIndex;
        this.playSpeed = playSpeed;
        this.next = next;
    }

   public int getDrawableResId() {
        return drawableResId;
   }

  public int getSongIndex() {
     return songIndex;
  }

  public int getPlaySpeed() {
      return playSpeed;
 }

  public AnimalType getNext() {
     return next;
  }

}


private int AnimalType currentAnimalType = null;

findViewById(R.id.change).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (currentAnimalType == null) {
            currentAnimalType = AnimalType.LION;
        } else {
            currentAnimalType = currentAnimalType.getNext();
       }

        ImageView.setImageResource(currentAnimalType.getDrawableId());
});

findViewById(R.id.SoundButton).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       if (currentAnimalType == null) {
          displayMessage("Please select animal to play");
          return;
       }

        soundManager.playByAnimalType(currentAnimalType);
    }
);



class SoundManager {
    public void playByAnimalType(AnimalType animalType) {
          playSound(animalType.getSongIndex(), animalType.getPlaySpeed());
    }

   private void playSound(int songIndex, int playSpeed) {
     ...
   }
}

 

spark (227,470 포인트) 님이 2021년 1월 8일 답변
답변 감사합니다 참고하도록 하겠습니다!
0 추천

원인은 아마도 인데스 관리에 있는 듯 해요.

int index = 0;

findViewById(R.id.change).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       int imageIndex = ++index % image.length;
       ImageView.setImageResource(image[imageIndex]);
    }
});

 

spark (227,470 포인트) 님이 2021년 1월 8일 답변
0 추천
index= 0 일때 마지막 ++을 하지말고,

그 외에는 ++을 먼저하면 될거 같은데..

 

체인지 버튼 맨뒤에 로그찍어서 인덱스랑 화면이랑 맞는지 확인해보세요
익명사용자 님이 2021년 1월 12일 답변
...