You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:59:20