2012-01-31 3 views
1

안녕하세요, 저는 오디오 파일 3 개와 각 이미지에 대해 세 개의 텍스트가 표시된 세 개의 이미지가 있습니다. 이제 응용 프로그램이 첫 번째 이미지를 시작하자마자 무엇을했는지, 텍스트 및 오디오 파일이 재생을 시작하고 두 번째 완료 후에 마찬가지로 세 번째 파일이 시작됩니다.android : 오디오 파일을 재생하고 이미지를 동적으로 표시합니다.

기본적으로 내가 다른 후 순차적으로 연주 한 이러한 필요하지만, 동적으로 내가이

와 비슷한 20 파일을 겪고 있기 때문에 아래에있는 내 코드

public class S001Activity extends Activity { 
    /** Called when the activity is first created. */ 

    ImageView img; 
    TextView display; 
    MediaPlayer apple = new MediaPlayer(); 
    MediaPlayer boy = new MediaPlayer(); 
    MediaPlayer cat = new MediaPlayer(); 
    //Runnable rb,rc; 

    Document doc; 
    DocumentBuilder builder; 
    Handler handler = new Handler(); 

    int i=0; 
    int noOfQues = 0; 
    //int media[] = {R.raw.apple_v,R.raw.boy_v,R.raw.cat_v}; 
    //int image[] = {R.drawable.apple,R.drawable.boy,R.drawable.cat}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     img = (ImageView)findViewById(R.id.img); 
     display = (TextView)findViewById(R.id.display); 

     img.setBackgroundResource(R.drawable.apple); 
     apple = MediaPlayer.create(this, R.raw.apple_v); 
     apple.start(); 
     xml(); 


     boy = MediaPlayer.create(this, R.raw.boy_v); 

     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       i++; 
       img.setBackgroundResource(R.drawable.boy); 

       boy.start(); 
       xml(); 
      } 
     },apple.getDuration()+ 2000); 

     cat = MediaPlayer.create(this, R.raw.cat_v); 
      handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       i++; 
       img.setBackgroundResource(R.drawable.cat); 
       cat.start(); 
       xml(); 
      } 
     },apple.getDuration()+ boy.getDuration()+ 2000); 
} 


    public void xml(){ 
     try { 
      InputStream in = getResources().openRawResource(R.raw.topic1761); 
      builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
      doc = builder.parse(in, null); 

      NodeList listOfPersons = doc.getElementsByTagName("Point"); 
      noOfQues = listOfPersons.getLength(); 
      System.out.println("items======= " + noOfQues); 

      Node firstPersonNode = listOfPersons.item(i); 

      Element firstPersonElement = (Element) firstPersonNode; 

      NodeList firstNameList = firstPersonElement.getElementsByTagName("PracticeText"); 
      Element firstNameElement = (Element) firstNameList.item(0); 

      NodeList textFNList = firstNameElement.getChildNodes(); 
      display.setText(((Node) textFNList.item(0)).getNodeValue().trim()); 

     } catch (Throwable t) { 
      Toast.makeText(this, "Exception: " + t.toString(), 2000).show(); 
     } 
    } 

편집 코드

@Override 
    public void onCompletion(MediaPlayer mps) { 
     // TODO Auto-generated method stub 
     //MediaPlayer mps = new MediaPlayer(); 

     img.setBackgroundResource(image[i]); 
     handler.post(new Runnable() { 

       @Override 
       public void run() { 

        xml(); 
        AssetFileDescriptor afd = getResources().openRawResourceFd(media[i]); 
        mp.reset(); 
        try { 
        mp.setDataSource(afd.getFileDescriptor()); 
        afd.close(); 
        mp.prepare(); 
        mp.start(); 

       } catch (IllegalArgumentException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       } 
      }); 
    } 
+0

질문은 어디에 있습니까? – Karthik

+0

나는 당신이 다시 올 수 없다는 것을 얻지 못했습니다. – Donald

+0

더 많은 파일을 지원하기 위해 논리를 확장하고 싶습니까? 즉 3 내지 20? – Karthik

답변

1

배열 또는 목록을 사용하여 음악 파일, 이미지 파일 및 텍스트 목록을 저장할 수 있습니다.
그런 다음 MediaPlayer.OnCompletionListener에서 다음 곡을 재생합니다.

편집 :

int media[] = {R.raw.apple_v,R.raw.boy_v,R.raw.cat_v}; 
MediaPlayer mp = new MediaPlayer(); 

// in OnCompletionListener, 
index = index + 1; //add proper checks 
handler.post(new Runnable() { 

    @Override 
    public void run() { 
     AssetFileDescriptor afd = getResources().openRawResourceFd(media[index]); 
     mp.reset(); 
     mp.setDataSource(afd.getFileDescriptor()); 
     afd.close(); 
     mp.prepare(); 
     mp.start(); 
    } 
}); 

난 당신이 위의 샘플 코드와 함께 아이디어를 얻을 수 있다고 생각합니다.

+0

당신은 제게 이런 식으로 시도했지만 그것을 시도하지 않았습니까? media [] = {R.raw.apple_v , R.raw.boy_v, R.raw.cat_v}; – Donald

+0

나는 현재 안드로이드 2.1 api 7 – Donald

+0

코드를 추가했습니다. 내 편집을 참조하십시오. – Karthik

관련 문제