Android View无效优化理念

时间:2016-06-03 12:59:08

标签: android animation canvas view

我正在尝试在我的Android应用程序上制作动画。

我有一个View列表,我希望每10毫秒绘制一次,以获得流畅的动画效果。

class CircularAnimationSector extends View{
    private double scale;
    private double circularPosition;
    private double circularLength;
    private double sectionRadiusRatio;
    private double circularSpeed;
    private int color;

    private Paint paint = new Paint();

    private ICircular iCircular;

    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);

        Path path = new Path();
        int width = this.getWidth();
        // int height = this.getHeight();
        Point center = new Point((int)(width / 2.0f), (int)(width / 2.0f));

        int innerWidthRadius = (int) (this.iCircular.GetViewSize() / 2.0f);

        float startRadius = (float)(innerWidthRadius * this.iCircular.GetStartRatio());
        float endRadius = (float)(startRadius + this.scale * (this.sectionRadiusRatio - this.iCircular.GetStartRatio()) * innerWidthRadius);
        float startAngle = (float)(this.circularPosition - this.circularLength / 2.0f);
        float endAngle = (float)(this.circularPosition + this.circularLength / 2.0f);

        Point p1 = new Point((int) (center.x + startRadius * Math.cos(startAngle)), (int) (center.y + startRadius * Math.sin(startAngle)));
        Point p3 = new Point((int) (center.x + endRadius * Math.cos(endAngle)), (int) (center.y + endRadius * Math.sin(endAngle)));

        // PATH DRAWING
        path.moveTo((float) (p1.x), (float) (p1.y));
        path.arcTo(new RectF(center.x - startRadius, center.y - startRadius, center.x + startRadius, center.y + startRadius), (float) (startAngle * 180 / Math.PI), (float) ((endAngle - startAngle) * 180 / Math.PI));
        path.lineTo((float) (p3.x), (float) (p3.y));
        path.arcTo(new RectF(center.x - endRadius, center.y - endRadius, center.x + endRadius, center.y + endRadius), (float) (endAngle * 180 / Math.PI), (float) ((startAngle - endAngle) * 180 / Math.PI));
        path.lineTo((float) (p1.x), (float) (p1.y));

        canvas.drawPath(path, this.paint);

        this.circularPosition += this.circularSpeed;
    }
}

但似乎动画并不像预期的那样流畅,而且应用程序滞后一点。

您对优化我的动画有什么建议吗? 我只想每隔10毫秒绘制一个视图(例如)然后再添加它的位置并再次围绕一个圆圈绘制它。

0 个答案:

没有答案
相关问题