Ejemplo n.º 1
0
 @Override
 public boolean onTouchEvent(MotionEvent event) {
   switch (event.getAction()) {
     case MotionEvent.ACTION_DOWN:
       mListener.waveformTouchStart(event.getX());
       break;
     case MotionEvent.ACTION_MOVE:
       mListener.waveformTouchMove(event.getX());
       break;
     case MotionEvent.ACTION_UP:
       mListener.waveformTouchEnd();
       break;
   }
   return true;
 }
Ejemplo n.º 2
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    mScaleGestureDetector.onTouchEvent(event);
    if (mGestureDetector.onTouchEvent(event)) {
      return true;
    }

    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mListener.waveformTouchStart(event.getX());
        break;
      case MotionEvent.ACTION_MOVE:
        mListener.waveformTouchMove(event.getX());
        break;
      case MotionEvent.ACTION_UP:
        mListener.waveformTouchEnd();
        break;
    }
    //   Log.i(GlobParam.LOG_TAG, "Ha entrat en WaveformView en onTouchEvent");
    return true;
  }
Ejemplo n.º 3
0
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mSoundFile == null) return;

    int measuredWidth = getMeasuredWidth();
    int measuredHeight = getMeasuredHeight();
    int start = mOffset;
    int width = mLenByZoomLevel[mZoomLevel] - start;
    int ctr = measuredHeight / 2;

    if (width > measuredWidth) width = measuredWidth;

    double onePixelInSecs = pixelsToSeconds(1);
    boolean onlyEveryFiveSecs = (onePixelInSecs > 1.0 / 50.0);
    double fractionalSecs = mOffset * onePixelInSecs;
    int integerSecs = (int) fractionalSecs;

    double timecodeIntervalSecs = 1.0;

    int factor = 1;
    while (timecodeIntervalSecs / onePixelInSecs < 50) {
      timecodeIntervalSecs = 5.0 * factor;
      factor++;
    }

    int integerTimecode = (int) (fractionalSecs / timecodeIntervalSecs);

    int i = 0;
    while (i < width) {
      fractionalSecs += onePixelInSecs;
      int integerSecsNew = (int) fractionalSecs;
      if (integerSecsNew != integerSecs) {
        integerSecs = integerSecsNew;
        if (!onlyEveryFiveSecs || 0 == (integerSecs % 5)) {
          canvas.drawLine(i + 1, 0, i + 1, measuredHeight, mGridPaint);
        }
      }

      Paint paint = selectWaveformPaint(i, start);
      // Draw waveform
      drawWaveform(canvas, i, start, measuredHeight, ctr, paint);

      i++;
    }

    // If we can see the right edge of the waveform, draw the
    // non-waveform area to the right as unselected
    for (i = width; i < measuredWidth; i++) {
      drawWaveformLine(canvas, i, 0, measuredHeight, mUnselectedBkgndLinePaint);
    }

    // Draw borders
    canvas.drawLine(
        mSelectionStart - mOffset + 0.5f,
        30,
        mSelectionStart - mOffset + 0.5f,
        measuredHeight,
        mBorderLinePaint);
    canvas.drawLine(
        mSelectionEnd - mOffset + 0.5f,
        0,
        mSelectionEnd - mOffset + 0.5f,
        measuredHeight - 30,
        mBorderLinePaint);

    // Draw grid
    fractionalSecs = mOffset * onePixelInSecs;
    i = 0;
    while (i < width) {
      i++;
      fractionalSecs += onePixelInSecs;
      int integerSecs2 = (int) fractionalSecs;
      int integerTimecodeNew = (int) (fractionalSecs / timecodeIntervalSecs);
      if (integerTimecodeNew != integerTimecode) {
        integerTimecode = integerTimecodeNew;

        // Turn, e.g. 67 seconds into "1:07"
        String timecodeMinutes = "" + (integerSecs2 / 60);
        String timecodeSeconds = "" + (integerSecs2 % 60);
        if ((integerSecs2 % 60) < 10) {
          timecodeSeconds = "0" + timecodeSeconds;
        }
        String timecodeStr = timecodeMinutes + ":" + timecodeSeconds;
        float offset = (float) (0.5 * mTimecodePaint.measureText(timecodeStr));
        canvas.drawText(timecodeStr, i - offset, (int) (12 * mDensity), mTimecodePaint);
      }
    }

    if (mListener != null) {
      mListener.waveformDraw();
    }
  }
Ejemplo n.º 4
0
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mSoundFile == null) return;

    if (mHeightsAtThisZoomLevel == null) computeIntsForThisZoomLevel();

    // Draw waveform
    int measuredWidth = getMeasuredWidth();
    int measuredHeight = getMeasuredHeight();
    int start = mOffset;
    int width = mHeightsAtThisZoomLevel.length - start;
    int ctr = measuredHeight / 2;

    if (width > measuredWidth) width = measuredWidth;

    // Draw grid
    double onePixelInSecs = pixelsToSeconds(1);
    boolean onlyEveryFiveSecs = (onePixelInSecs > 1.0 / 50.0);
    double fractionalSecs = mOffset * onePixelInSecs;
    int integerSecs = (int) fractionalSecs;
    int i = 0;
    while (i < width) {
      i++;
      fractionalSecs += onePixelInSecs;
      int integerSecsNew = (int) fractionalSecs;
      if (integerSecsNew != integerSecs) {
        integerSecs = integerSecsNew;
        if (!onlyEveryFiveSecs || 0 == (integerSecs % 5)) {
          canvas.drawLine(i, 0, i, measuredHeight, mGridPaint);
        }
      }
    }

    // Draw waveform
    for (i = 0; i < width; i++) {
      Paint paint;
      if (i + start >= mSelectionStart && i + start < mSelectionEnd) {
        paint = mSelectedLinePaint;
      } else {
        drawWaveformLine(canvas, i, 0, measuredHeight, mUnselectedBkgndLinePaint);
        paint = mUnselectedLinePaint;
      }
      drawWaveformLine(
          canvas,
          i,
          ctr - mHeightsAtThisZoomLevel[start + i],
          ctr + 1 + mHeightsAtThisZoomLevel[start + i],
          paint);

      if (i + start == mPlaybackPos) {
        canvas.drawLine(i, 0, i, measuredHeight, mPlaybackLinePaint);
      }
    }

    // If we can see the right edge of the waveform, draw the
    // non-waveform area to the right as unselected
    for (i = width; i < measuredWidth; i++) {
      drawWaveformLine(canvas, i, 0, measuredHeight, mUnselectedBkgndLinePaint);
    }

    // Draw borders
    canvas.drawLine(
        mSelectionStart - mOffset + 0.5f,
        30,
        mSelectionStart - mOffset + 0.5f,
        measuredHeight,
        mBorderLinePaint);
    canvas.drawLine(
        mSelectionEnd - mOffset + 0.5f,
        0,
        mSelectionEnd - mOffset + 0.5f,
        measuredHeight - 30,
        mBorderLinePaint);

    // Draw timecode
    double timecodeIntervalSecs = 1.0;
    if (timecodeIntervalSecs / onePixelInSecs < 50) {
      timecodeIntervalSecs = 5.0;
    }
    if (timecodeIntervalSecs / onePixelInSecs < 50) {
      timecodeIntervalSecs = 15.0;
    }

    // Draw grid
    fractionalSecs = mOffset * onePixelInSecs;
    int integerTimecode = (int) (fractionalSecs / timecodeIntervalSecs);
    i = 0;
    while (i < width) {
      i++;
      fractionalSecs += onePixelInSecs;
      integerSecs = (int) fractionalSecs;
      int integerTimecodeNew = (int) (fractionalSecs / timecodeIntervalSecs);
      if (integerTimecodeNew != integerTimecode) {
        integerTimecode = integerTimecodeNew;

        // Turn, e.g. 67 seconds into "1:07"
        String timecodeMinutes = "" + (integerSecs / 60);
        String timecodeSeconds = "" + (integerSecs % 60);
        if ((integerSecs % 60) < 10) {
          timecodeSeconds = "0" + timecodeSeconds;
        }
        String timecodeStr = timecodeMinutes + ":" + timecodeSeconds;
        float offset = (float) (0.5 * mTimecodePaint.measureText(timecodeStr));
        canvas.drawText(timecodeStr, i - offset, 15, mTimecodePaint);
      }
    }

    if (mListener != null) {
      mListener.waveformDraw();
    }
  }