如何在Activity中实现画线动画?基于Stack示例的代码求助
在Android Activity中实现画线动画的完整方案
嘿,我看你已经基于Stack的示例搭好了自定义View的基础架子,现在来帮你把画线动画的功能补全,让它在Activity里正常跑起来~
首先,我把你没写完的代码补全,并且加上动画逻辑,完整代码如下:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 实例化自定义画线View DrawLine drawLineView = new DrawLine(this); setContentView(drawLineView); // 启动画线动画 drawLineView.startLineAnimation(); } private static class DrawLine extends View { private Paint linePaint; // 线条起点坐标(可自行调整) private int startX = 100; private int startY = 100; // 线条终点坐标(可自行调整) private int endX = 800; private int endY = 800; // 动画过程中的实时终点坐标 private float currentEndX; private float currentEndY; public DrawLine(Context context) { super(context); initPaint(); setFocusable(true); // 初始时让实时终点和起点重合,动画前看不到线条 currentEndX = startX; currentEndY = startY; } private void initPaint() { linePaint = new Paint(); linePaint.setColor(Color.BLUE); linePaint.setStrokeWidth(10f); // 必须设置为STROKE模式,否则画出来的是填充图形而非线条 linePaint.setStyle(Paint.Style.STROKE); // 开启抗锯齿,让线条更平滑 linePaint.setAntiAlias(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制从起点到实时终点的线条 canvas.drawLine(startX, startY, currentEndX, currentEndY, linePaint); } public void startLineAnimation() { // 使用ValueAnimator控制动画进度,从0到1表示动画完成度 ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f); animator.setDuration(2000); // 设置动画时长为2秒 animator.addUpdateListener(animation -> { float progress = (float) animation.getAnimatedValue(); // 根据进度计算实时终点:起点 + (终点-起点)*进度 currentEndX = startX + (endX - startX) * progress; currentEndY = startY + (endY - startY) * progress; // 触发重绘,更新线条显示 invalidate(); }); animator.start(); } } }
关键部分说明:
- Paint配置:这是很容易踩坑的点,一定要设置
setStyle(Paint.Style.STROKE),默认的填充模式画不出线条;加上抗锯齿能提升视觉效果。 - 动画逻辑:用
ValueAnimator监听动画进度,通过进度值计算当前线条的终点位置,每次更新后调用invalidate()触发View重绘,就能实现线条逐步延伸的动画效果。 - Activity调用:在
onCreate中实例化自定义View后,直接调用startLineAnimation()就能启动动画,不需要额外复杂的配置。
你可以根据需求调整:
- 修改
startX/startY、endX/endY来改变线条的起点和终点 - 调整
setDuration()的参数来修改动画时长 - 更改
linePaint.setColor()、linePaint.setStrokeWidth()来调整线条的颜色和粗细
内容的提问来源于stack exchange,提问作者ImStupid
相关产品推荐
相关产品推荐

