Android:带线程的平滑动画和invalidate()

时间:2014-03-10 13:47:17

标签: android multithreading animation

我目前正在尝试使用条形图根据值的变化来上下移动条形图。

我使用一个单独的线程来处理绘图,刷新率为20ms,并使用postInvalidate()重绘我的视图。

我遇到的问题是,在postInvalidate之后,onDraw并不总是立即被调用,因此动画不是很流畅。

我尝试在每个onDraw()中使用固定增加的barsize,也尝试使用动态的增加,这些方法都不会产生非常平滑的动画,如果调用onDraw()花费太长时间会导致“滞后”。

此外,我也尝试使用SurfaceView而不是View也没有太大的成功。

无论如何都要创建一个平滑动画这个方法吗?或者我应该采取不同的方式?

1 个答案:

答案 0 :(得分:0)

通常我们不使用额外的线程来处理动画步骤。坚持动画框架提供的现有设施。

以下是平滑缩放动画的示例:

    private static  class ZoomAnimation extends Animation {
        private float mFrom;
        private float mTo;
        private MyView mMyView;

        public ZoomAnimation(MyView v, float from, float to) {
            mFrom = from;
            mTo = to;
            mMyView = v;
            setDuration(160);
        }

        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            float f = mFrom + ((mTo - mFrom) * interpolatedTime);
            mMyView.setPerformZoom(f);
        }
    }