android 动画的各种动画的原理就是不停的重绘吗?

最近想自定义一个ViewGroup来实现一些动画,我目前是这样写的,就是用两个数组,一个数组来保存所有的子View
,还有一个数组来保存子view的一些位置参数,然后当动画开始的时候,就不停的改变参数数组里面的值,然后
再不停的invalidate。我设置的是5ms重绘一次。但是有的时候感觉稍微有点卡。

那些大神写的各种炫酷的动画控件,实际上也是不停的invalidate吗?但是我的为什么感觉很不流畅协调,是不是计算参数的操作,要放到 .so 里面去?

http://blog.csdn.net/yelbosh/article/details/7750500

你5ms明显设置的太频繁了,android屏幕16ms刷新一次,你的想法是对的,动画的原理就是一帧一帧的图像,但是android超过60帧每秒就没意义了,你想做动画,去找找Animation相关的东西, 和View一起会更好。

如果只是想给控件加动画,比如缩放、移动、旋转等用android自带的动画。
如果想通过画布来实现动画,耗时操作比如计算放在子线程里,onDraw方法只执行渲染操作
如果对流畅要求高可用用SurfaceView来画。
楼上说设置16ms应该是没用的。。。怀疑你是在主线程做了耗时操作导致卡的

我是这样的,当开启了动画之后,我会开启一个子线程,我在我自定义的ViewGroup里面new 了一个Handler,然后在这个子线程里面,每隔16ms通知handler来invalidate,我的计算操作是放在子线程里面的,
public boolean startAnimator() {
if (animate)
return true;
animate = true;
new Thread() {
@Override
public void run() {
super.run();
while (currentTime < animateTime) {
//数据操作
if (inteporlate != null)
carculateAngle(inteporlate.getInterpolation(currentTime / animateTime));
else
carculateAngle(getInteporlate(currentTime / animateTime));
//
handler.sendEmptyMessage(0);
try {
currentTime += 10;
sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
currentTime = 0;
animate = false;
}
}.start();
return false;
}

    就这样的。我自己写了一个类似于Intepolater的类,

        /**
 * 默认的插值器
 * @param i
 * @return
 */
private double getInteporlate(float i) {
    if (i < 0.4) {
        return 4;
    } else if (i < 0.5) {
        return 3;
    } else if (i < 0.6) {
        return 2.2;
    } else if (i < 0.7) {
        return 1.9;
    } else if (i < 0.8) {
        return 1.5;
    } else if (i < 0.85) {
        return 1;
    } else {
        return 0.8;
    }
}

    我不知道是不是插值器的原因,还是什么。