2017-11-02 60 views
5

chcę odtwarzać dźwięk na obracanie koła według kąta i koordynuje prędkość koła obracającegoJak grać efekt dźwięku koła wirowania współtworzyli z prędkością lub linii Arc

Chcę dźwięku Odtwarzanie na prawo czas, w którym styk dotyka dotkniętego łukiem linii.

Co więcej, chcesz animować na szpilce, gdy dotyk przypomina wstrząsanie.

Dźwięk jest play ale dźwięk ciągle grać i poszukiwania nie Współrzędne Według koła Canvas

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    drawWheelBackground(canvas); 
    initComponents(); 

    float tempAngle = 0; 
    float sweepAngle = 360/mWheelItems.size(); 
    if (this.mWheelItems != null) { 

     Log.e("mWheelItems.size()", String.valueOf(mWheelItems.size())); 
     for (int i = 0; i < mWheelItems.size(); i++) { 
      archPaint.setColor(mWheelItems.get(i).color); 
      archPaint1.setColor(Color.WHITE); 

      canvas.drawArc(range, tempAngle, sweepAngle, true, archPaint2); 
      canvas.drawArc(range, tempAngle, sweepAngle, true, archPaint); 

      drawImage(canvas, tempAngle, mWheelItems.get(i).bitmap, mWheelItems.get(i).mvalue, sweepAngle); 

     } 

     if (!(this.resourcePlayer == null)) { 

      if (this.resourcePlayer.isPlaying()) { 
       resourcePlayer.setVolume(100, 100); 
       this.resourcePlayer.seekTo(0); 

      } else { 

       this.resourcePlayer.start(); 

      } 
     } 

    } 
} 

Obrót według wheelItemCenter i 360 stopni

final float wheelItemCenter = 180 - getAngleOfIndexTarget(target) + (360/mWheelItems.size())/2; 

    animate().setInterpolator(new DecelerateInterpolator()) 
      .setDuration(DEFAULT_ROTATION_TIME) 
      .rotation((360*5) + wheelItemCenter) 

enter image description here

+0

można podać łącze jsfiddle do sprawdzania czasu wykonywania. – spankajd

+1

NIE, nie używam jsfiddle, to jest zrobione przez androidowe płótno, nie używając żadnego js ... –

Odpowiedz

2

Więc jeśli ja” rozumiem poprawnie, chcesz dostosować dźwięk w oparciu o prędkość koła i grać, gdy trafi on jedną z twoich szpilek.

Odtwarzanie go za każdym razem, gdy trafi jedną z pinezek, powinno być pytaniem matematycznym, jeśli gra się w sposób ciągły, co oznaczałoby, że koło obraca się szybko, a dźwięk, który grasz, jest dłuższy niż czas między uderzeniem w dwie szpilki , Zakładam.

Możesz odtwarzać dźwięk z speed i pitch. Jeśli używasz MediaPlayer, możesz zmienić PlaybackParams według this - sprawdź setPitch i setSpeed.

Im szybsze jest twoje koło, tym wyższa jest prędkość/wysokość dźwięku. Im wolniej, tym bardziej spowalniasz dźwięk.

+0

Nie chciałbym iść tą drogą, czy nigdy nie słyszałeś kołowrotka? Sugerowałbym rozpoczęcie nowego wątku do odtwarzania przy każdym trafieniu. – PanBrambor