圆形小径在画布上淡出

时间:2016-07-05 14:58:59

标签: android android-canvas android-drawable alpha

我正在尝试修改我的Canvas和触摸事件,以便在用户仍然沿着画布移动时,绘制到它的圆圈最终淡出。

像这样:enter image description here

小圈子超时淡出。

我已经完成了与Bitmaps相关的大多数类似问题。我一直在努力实现这些问题中建议的提示,因为我的圆坐标存储在一个循环并绘制的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栏中圆圈的alpha值以反映淡出的最后一个元素,但这会导致口吃效果,而不是平滑淡出所有先前的点。

道歉,如果这个问题有点重复,我真的很感激如何解决这个问题。

如果有什么我应该澄清的话,请告诉我。

1 个答案:

答案 0 :(得分:0)

如果想要平滑淡出,则需要使用Handlers进行动画处理。这个想法是,如果你希望你的淡出非常平滑,你需要以很短的间隔调用onDraw()。这就是你如何使淡出效果平滑。您正面临口吃效应,因为您没有足够时间调用onDraw()

您需要的是Handler,您需要以非常短的间隔发布Runnable。通过这种方式,您将invalidate()多次,并根据需要使淡出淡出。

如果您想知道如何使用Handler,可以谷歌搜索。我曾经使用过Pagination控件,我也可以参考它:https://github.com/Madrapps/pagination/blob/master/src/main/java/com/instrap/apps/pagination/views/MovingDots.java。这与您的使用案例无关,但会让您了解如何使用HandlersRunnable在自定义视图中执行动画。