2014-09-02 63 views
0

我有一個圖形,其中光線不透明的頂部。我想根據歌曲來繪製我的弧線時間。基於歌曲持續時間公式繪製的每件曲線片不起作用

我的橢圓形是這樣的:

private void drawTimeArc(int angle, int position) { 
    Log.d(TAG,"DrawTimeArc " + angle + " " + position); 
    Paint p = new Paint(); 
    p.setAntiAlias(true); 
    p.setStyle(Paint.Style.STROKE); 
    p.setStrokeWidth(200); 
    p.setColor(Color.BLACK); 
    p.setAlpha(10); 

    RectF rectF = new RectF(100, 100, 500, 500); 

    mCanvas.drawArc(rectF, position, angle, false, p); 

    drawingImageView.invalidate(); 
} 

角度是我WIST添加和位置是在哪裏畫的位置的角度。初始位置是270,因爲那是90度。爲什麼270,因爲drawArc是順時針繪製的。

我的計算得出每第二一塊是這樣的:

  long duration = TimeUnit.MILLISECONDS.toSeconds(mPlayer.getDuration()); 
       drawTimeArc((int)(360/duration), position); 
       position += 360/duration; 

這裏MPlayer是一個MediaPlayer的。

我認爲這個圓是360度,所以360 /持續時間給你你想每秒添加的角度。職位從270開始,並添加,所以它轉變。

問題是,我的歌完成了,我的圈子有點超過了一半。所以它只能做到183度。

有人可以調整我的公式嗎?因爲它必須適用於每首歌曲。所以360 * 2不是一個解決方案。

回答

0

我發現這個問題。問題是我把它分配給一個int。所以這就是爲什麼它給了我總是1.

這是你如何解決這個問題:

 double duration = TimeUnit.MILLISECONDS.toSeconds(mPlayer.getDuration()); 
      int angle = (int) Math.ceil(360/duration); 
      drawTimeArc(angle, position); 
      position += angle; 

你需要double,然後做一個小區。

2

我做過類似的東西,但對於一個進度對話框(原理相同)

//Draw arc (progressbar) 
    Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setFlags(Paint.ANTI_ALIAS_FLAG); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(18); 
    paint.setColor(Color.parseColor(arcColor)); 
    RectF rectF = new RectF(screenWidth/2-100, screenHeight/2-100, screenWidth/2+100, screenHeight/2+100); 
    canvas.drawArc(rectF, -90, arcDrawValue, false, paint); 

Github的項目:Github project link

輸出:

enter image description here

+0

而我該如何計算arcDrawValue? – user1007522 2014-09-02 12:11:40

+0

我在這個項目中創建了一個虛擬的東西,同時(arcDrawValue <360)arcDrawValue ++; progressValue =(arcDrawValue)/3.6;} – 2014-09-02 12:14:07

+0

給我您從mPlayer.getDuration()收到的價值,這樣我就可以重現您的狀況:) – 2014-09-02 12:18:17