我在其他视图之上有一个自定义视图,我正在使用这样的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>
答案 0 :(得分:0)
VideoView是SurfaceView的子类。 SurfaceView具有特殊的交互,因此可以解释为什么它的行为不同。来自SurfaceView docs:
&#34;视图层次结构将负责与Surface正确合成SurfaceView中通常出现在其上的所有兄弟姐妹。这可用于在表面顶部放置叠加,例如按钮,但请注意,它会对性能产生影响,因为每次Surface更改时都会执行完整的Alpha混合复合。&#34;
在自定义视图中尝试覆盖view.isOpaque为false。