SurfaceView没有动画

时间:2013-07-30 16:20:40

标签: android animation android-custom-view

我创建了一个surfaceView并附加了一个alpha淡入淡出动画,但它似乎没有动画效果。

这是我的动画代码:

fadeOut = new AlphaAnimation(1.0f, 0.0f);
        fadeOut.setInterpolator(new AccelerateInterpolator());
        fadeOut.setDuration(1000);

        fadeIn = new AlphaAnimation(0.0f, 1.0f);
        fadeIn.setInterpolator(new AccelerateDecelerateInterpolator());
        fadeIn.setDuration(1000);
animation = new AnimationSet(false); 
        animation.addAnimation(fadeIn);
        animation.addAnimation(fadeOut);

        //this.setAnimation(animation);
        animation.setRepeatCount(Animation.INFINITE);
        animation.setRepeatMode(Animation.REVERSE);

在我的onDraw方法中,我只需要调用此

super.onDraw(canvas);
    this.startAnimation(animation);

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:1)

SurfaceView是一种特殊的视图。我对它的确切实现并不是那么熟悉,但我理解的是它在你的应用程序中创建了或多或少的漏洞,并将视图呈现在普通框架之外。这导致无法对其进行动画制作(或至少限制它)。

如果您真的想要淡入淡出动画,我建议您自己在SurfaceView中实现它,或者考虑从View而不是SurfaceView进行扩展。

答案 1 :(得分:1)

Android ICS(v4)添加了TextureView supports animations

  

由于SurfaceView的内容不在应用程序窗口中,因此无法有效地转换(移动,缩放,旋转)。这使得在ListView或ScrollView中使用SurfaceView变得很困难。 SurfaceView也无法与UI工具包的某些功能正确交互,例如淡化边缘或View.setAlpha()。

     

为了解决这些问题,Android 4.0引入了一个名为TextureView的新窗口小部件,它依赖于硬件加速的2D渲染管道和SurfaceTexture。 TextureView提供与SurfaceView相同的功能,但与SurfaceView不同,它表现为常规视图。例如,您可以使用TextureView来显示OpenGL场景或视频流。 TextureView本身可以是动画,滚动等。