2016-07-05 4 views
0

キャンバスとタッチイベントを変更しようとしているため、キャンバスに沿って動いている円がキャンバスに沿って移動している間に消えてしまいます。このような円の軌跡がキャンバス上でフェードアウト

何か:小さな円は残業をフェードアウトenter image description here

私はビットマップを扱うこのような質問の大半を行ってきました。私は円の座標がキャンバスに描かれた個々の形状/画像ではなく、ループして描かれた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の使い方を知りたい場合は、Googleに送信してください。私はこれを使用したページネーションコントロールに取り組んできましたが、これも参照できます:https://github.com/Madrapps/pagination/blob/master/src/main/java/com/instrap/apps/pagination/views/MovingDots.java。これはあなたのユースケースとは関係ありませんが、HandlersRunnableを使用してカスタムビューでアニメーションを実行する方法のアイデアを提供します。

+0

ありがとうございました!私はあなたのコードを見て、オンラインで少し読んだ。私は基本的なフェードアニメーションを作っています:)。しかし、今は、同時に描画されたすべての円をフェードアウトします。あなたは、最も古いものから最近のものまで、ずらしたアニメーションをどのように達成できるのか分かりますか? –

+0

この計算に 'pointList'のインデックスを持ち込む必要があります。あなたの 'Runnable'では、インデックスに基づいてアニメーションを区別する必要があります。 – Henry

関連する問題