我使用以下代码在绘制视图时为视图设置动画...
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;
}
}
}
我期待的是,它必须是一种不断增长的观点...我的意思是视图必须随着它的绘制而增长...但我无法生产这样做......我怎么能成为能够解决这个问题吗?
答案 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,它实际上将大小调整为正确的动画结束(我相信 - 我可能在这方面错了),动画结束后,视图将重新调整大小。
我希望有所帮助!