2016-07-05 128 views
0

我想要修改我的畫布和觸摸事件,以便在用戶仍然沿着畫布移動時,最後繪製的圓圈逐漸淡出。圓形軌跡在畫布上淡出

事情是這樣的:enter image description here

其中較小的圓淡出加班。

我已經經歷了大部分與Bitmap相關的類似問題。我一直在努力實現在這些問題中提出的提示,因爲我的圓形座標存儲在循環繪製的ArrayList中,而不是繪製到畫布上的單個形狀/圖像。

下面是我到目前爲止已經寫的:

case MotionEvent.ACTION_MOVE: { 
      if (inCircle(event, sceneView.circleRadius - 30)) { 

       int pointer = event.getPointerCount(); 


       Point xyPoint = new Point(); 
       for (int i = 0; i < pointer; i++) { 



         xInput = (int) event.getX() - (50/2); 
         yInput = (int) event.getY() - (50/2); 

         colorList.add(getCircleColor(sceneView.myBitmap)); 

         xyPoint.x = xInput; 
         xyPoint.y = yInput; 
         pointList.add(xyPoint); 

       } 
       invalidate(); 
       return true; 
      } 
     } 

和的onDraw:

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

     for (int i = 0; i < pointList.size(); i++) { 
      Point p = pointList.get(i); 
      touchCircle.setColor(colorList.get(i)); 

      canvas.drawCircle(p.x, p.y, touchRadius, touchCircle); 
     } 
} 

我試圖修改ArrayList中圓的阿爾法值欄的最後元素來反映淡出,但這會導致一個口吃效果,而不是以前所有點的平滑淡出。

道歉,如果這個問題出現重複,我只是非常感謝一些意見,關於如何解決這個問題。

請讓我知道是否有任何我應該澄清。

回答

0

如果您想平穩淡出,您需要使用Handlers進行動畫製作。這個想法是,如果你希望你的淡入淡出,你需要在很短的時間內撥打onDraw()。這就是你將如何平滑淡出。您正面臨口吃效應,因爲您沒有撥打onDraw()足夠的時間。

您需要的是Handler,您需要以非常短的間隔發佈Runnable。這樣,您將多次使用invalidate(),並使淡出儘可能平滑。

如果你想知道如何使用Handler,你可以谷歌它。我曾在一個分頁控件中使用過這個,你可以參考這個:https://github.com/Madrapps/pagination/blob/master/src/main/java/com/instrap/apps/pagination/views/MovingDots.java。這與您的使用案例無關,但會告訴您如何使用HandlersRunnable在自定義視圖中執行動畫。

+0

謝謝!我瀏覽了一下你的代碼並在網上閱讀了一下。我現在有一個基本的淡入淡出動畫:)。然而,現在它淡化了同時繪製的所有圈子。你會知道我怎麼能夠實現從最古老的繪製到最近的動畫的交錯動畫。 –

+0

你需要在這個計算中引入'pointList'的索引。在你的'Runnable'中,你需要根據索引區分動畫。 – Henry