【问题标题】:How do I get rid of this black bar during animation?如何在动画期间摆脱这个黑条?
【发布时间】:2018-04-10 18:30:44
【问题描述】:

我正在尝试对 Activity 转换执行自定义动画。该活动应该平滑地向上滑动而不是从侧面滑动。它可以工作,但视图顶部有一个黑条(与状态栏大小相同)。我怎样才能摆脱黑条?这是我正在使用的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  overridePendingTransition(R.anim.upin, R.anim.upout);
  setContentView(R.layout.screen_login);
}

动画upin:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="100%" android:toYDelta="0%" android:duration="500" />
</set>

动画输出:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%" android:toYDelta="0%" android:duration="500" />
</set>

编辑:如果我将所有活动都设为全屏,它会完美运行。当然,我不希望所有的活动都是全屏的。

【问题讨论】:

    标签: android animation transition


    【解决方案1】:

    好的,找到了这样做的方法。在您制作动画的活动中,覆盖您的 onCreate 方法。在调用 setContentView 之前(我不知道这是否必要,但这是我做的顺序),添加这段代码 sn -p:

    ColorDrawable colorDrawable = new ColorDrawable( Color.TRANSPARENT );
    getWindow().setBackgroundDrawable( colorDrawable );
    

    这对我来说就像一个魅力,我还没有看到任何其他副作用。

    我实际上遇到了同样的问题并偶然发现了您的问题。希望对您有所帮助。

    • 新郎

    编辑:在运行 2.3.4 的 Nexus One 上测试

    【讨论】:

    • 您也可以通过在清单中将活动的主题设置为Theme.Translucent 来获得相同的效果。喜欢这里:stackoverflow.com/a/6468734/483708
    • 我做了一些类似的事情,但我的布局上有一张背景图片。我使用以下代码来处理:getWindow().setBackgroundDrawableResource(R.drawable.picture);
    • 原来设置 Theme.Translucent 会干扰 overridePendingTransition 动画(在我的情况下,退出动画没有播放)。 OP的解决方案没有这样的问题。
    • 在我的情况下,我有另一个 Activity 位于一个之上。所以将背景设置为透明是行不通的。一旦我有解决方案就会发布
    • @groomsy 这使得整个活动透明,除了黑条,现在是灰色的,
    【解决方案2】:

    好的,我尝试了一些东西,比如制作相对于父级的增量等。我认为核心问题是活动在顶部有额外的空间,也就是那个黑条。据我所知,除了将其从活动中拉出并使其成为视图之外,实际上没有什么可做的。

    将该视图放置到 ViewAnimator 中,然后将输入和输出转换设置为我已经列出的那些,这就像一个魅力。我相当确信没有其他方法可以做到这一点。如果有人想出一个,请告诉我,但这解决了我的问题。

    【讨论】:

    • 你是什么意思“把它从活动中拉出来,让它成为一个视图”
    【解决方案3】:

    我知道这个问题已经很老了,但我遇到了同样的问题(活动顶部的黑条/空格),这为我解决了这个问题:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
        setContentView(R.layout.your_layout);
    }
    

    希望这会帮助那些偶然发现这个问题的人:)

    【讨论】:

    • 这会将所有内容都推到屏幕上
    【解决方案4】:

    解决方案是在 overridePendingTransition() 时防止黑色背景 https://stackoverflow.com/a/49751078/5423596

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 2017-08-02
      • 2011-08-08
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      相关资源
      最近更新 更多