无法创建不断增长的视图

时间:2016-11-19 17:46:47

标签: android android-custom-view

我使用以下代码在绘制视图时为视图设置动画...

public class MyView extends View {

    int iCurStep = 0;// current animation step

    class Points {
        float x, y;

        Points(float _x, float _y) {
            x = _x;
            y = _y;
        }
    }

    Points[] drawPaths = {new Points(-75, 0), new Points(20, 60), new Points(60, 20)};


    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override

    protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.GREEN);
        paint.setStrokeWidth(2);
        paint.setStyle(Paint.Style.STROKE);

        Path        path        = new Path();
        PathMeasure pm          = new PathMeasure(path, false);

        if (iCurStep <= 20) {
            pm.getPosTan(fSegmentLen * iCurStep, afP, null);
            path.moveTo(drawPaths[0].x, drawPaths[0].y);
            for (int i = 1; i < drawPaths.length; i++) {
                path.lineTo(drawPaths[i].y, drawPaths[i].y);
            }
            canvas.drawPath(path, paint);
            iCurStep++;
        } else {
            iCurStep = 0;
        }
    }
}

我期待的是,它必须是一种不断增长的观点...我的意思是视图必须随着它的绘制而增长...但我无法生产这样做......我怎么能成为能够解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用ObjectAnimator

正常创建视图,然后创建ObjectAnimator(文档:https://developer.android.com/reference/android/animation/ObjectAnimator.html)。您可以在片段或活动中执行类似的操作(也可以使用XML格式)。基本上,您为具有属性字符串的对象创建ObjectAnimator。属性字符串必须具有camelCase setter。因此,如果要将view.setScaleX()作为要修改的属性调用,则需要将属性字符串设置为“scaleX”。这是一个简单的例子。

View growMe = new View(args);
float startSize = 1.0f;
float endSize = 2.0f;
ObjectAnimator grower = ObjectAnimator.ofFloat(growMe, "scaleX", startSize, endSize);
int durationMs = 1000;
grower.setDuration (durationMs)
grower.start();

你需要做的另一件事是向你的View添加一个AnimationListener,它实际上将大小调整为正确的动画结束(我相信 - 我可能在这方面错了),动画结束后,视图将重新调整大小。

我希望有所帮助!