我正在尝试修改我的Canvas和触摸事件,以便在用户仍然沿着画布移动时,绘制到它的圆圈最终淡出。
小圈子超时淡出。
我已经完成了与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值以反映淡出的最后一个元素,但这会导致口吃效果,而不是平滑淡出所有先前的点。
道歉,如果这个问题有点重复,我真的很感激如何解决这个问题。
如果有什么我应该澄清的话,请告诉我。
答案 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。这与您的使用案例无关,但会让您了解如何使用Handlers
和Runnable
在自定义视图中执行动画。