Android自定义视图和alpha动画

时间:2014-06-25 10:11:43

标签: android animation view alpha ondraw

我在其他视图之上有一个自定义视图,我正在使用这样的ViewPropertyAnimator淡出:

mCustomView.animate().setDuration(sFadeDuration).alpha(0f).setListener(new Animator.AnimatorListener() { ... });

这样可行,但问题是我在mCustomView下有一些只在动画结束后显示的视图。

我想要的是让他们在顶部视图消失时被揭示出来。奇怪的是,有一个视图的行为符合预期,即VideoView(参见下面的布局结构)。

所以我看到VideoView在消失的视图下消失了,但是在动画结束后,所有其他视图都会弹出。

动画视图是一个自定义视图,它会覆盖onDraw,如下所示:

@Override
protected void onDraw(Canvas canvas) {
    TextPaint paint = new TextPaint();
    canvas.drawColor(Color.TRANSPARENT);

    Canvas c = new Canvas(mBitmap);
    c.drawRect(0, 0, mMetrics.widthPixels, mMetrics.heightPixels, paint);

    paint.setColor(mColor);

    canvas.drawBitmap(mBitmap, 0,0, paint);
}

当我不覆盖onDraw时,一切都按预期工作。

有人知道为什么在动画结束之前不会渲染其他视图吗?有避免这种情况的解决方案吗?我是否必须以某种方式在onDraw方法中应用动画?

这是布局结构:

<RelativeLayout>
  <VideoView />
     <RelativeLayout>
            <LinearLayout>
            <TextView />
            <TextView />
            </LinearLayout>

            <LinearLayout>
            <View />
            </LinearLayout>

            <LinearLayout>
            <Button />
            <Button />
            </LinearLayout>

            <Button />

   </RelativeLayout>
   <CustomView />
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

VideoView是SurfaceView的子类。 SurfaceView具有特殊的交互,因此可以解释为什么它的行为不同。来自SurfaceView docs

&#34;视图层次结构将负责与Surface正确合成SurfaceView中通常出现在其上的所有兄弟姐妹。这可用于在表面顶部放置叠加,例如按钮,但请注意,它会对性能产生影响,因为每次Surface更改时都会执行完整的Alpha混合复合。&#34;

在自定义视图中尝试覆盖view.isOpaque为false。