0

我创建了一个 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);

有什么建议么?

谢谢

4

2 回答 2

1

Android ICS (v4) 添加了支持动画的 TextureView

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

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

于 2013-08-29T12:33:55.117 回答
1

SurfaceView 是一种特殊的视图。我不太熟悉它的确切实现,但我的理解是它或多或少会在您的应用程序中创建一个漏洞,并将视图呈现在正常框架之外。这导致无法在其上执行动画之类的操作(或至少限制它)。

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

于 2013-07-31T09:35:03.727 回答