2016-07-05 92 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