【问题标题】:How to position bitmap in splash screen如何在启动画面中定位位图
【发布时间】:2016-06-17 11:57:06
【问题描述】:

亲爱的,

我有一个正方形的 title.png,我以纵向模式(更不用说横向模式)在屏幕上端的(也是正方形的)TitleFragment 中显示它。现在我想在加载时向我的应用程序添加启动画面。我关注了这个tutorial,它工作正常。我的splash.xml 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@color/dark"/>
    <item>
        <bitmap
            android:gravity="top"
            android:src="@drawable/title"/>
    </item>
</layer-list>

如您所见,我使用与 TitleFragment 中相同的 title.png,但是,我未能将其定位在 与 TitleFragment 显示图像相同的位置。我的titlefragment.xml 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/title"
        tools:ignore="ContentDescription"/>
</FrameLayout>

mainactivity.xml 将其定位在屏幕顶部尽可能大的方格中。

我的问题是:我可以在启动画面中模拟片段的定位吗?我希望启动画面中的title.png 和titleFragment 中的title.png 一致。我已经玩过splash.xml (android:gravity="top") 中的相关线路,但无济于事。

编辑:以下是一些屏幕截图。首先是显示启动画面:

第二个是显示主要活动(显然是虚拟文本):

【问题讨论】:

  • 你能附上两个屏幕的图像吗?它在您的手机或模拟器中的显示效果如何?

标签: android xml android-layout splash-screen android-bitmap


【解决方案1】:

它们不匹配,因为普通位图没有与ImageView 相同的属性。 ImageView 的默认比例类型为 FIT_CENTER。不幸的是,位图没有任何缩放属性。

您应该能够做的是,在您的SplashActivity 中设置窗口背景,而不是在主题中设置窗口背景(如正确的启动画面 建议的那样)。通过这种方式,您可以调整背景可绘制对象的边界以匹配屏幕大小:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Display display = getWindowManager().getDefaultDisplay();

    LayerDrawable drawable = (LayerDrawable) ContextCompat.getDrawable(this, R.drawable.splash);
    drawable.setBounds(0, 0, display.getWidth(), display.getHeight());
    getWindow().getDecorView().setBackground(drawable);

    startMainActivity();
}

如果您还将保存标题可绘制对象的图层的重力设置为top|center_horizontal,则应该允许您调整layer-list 中可绘制标题的大小以匹配屏幕宽度:

<item android:gravity="top|center_horizontal">
    <bitmap android:drawable="@drawable/title"/>
</item>

不过,这仍然可能无法为您提供完美的结果,尤其是在横向上。您可能仍然想弄乱可绘制对象的大小以及 ImageView 的比例类型以使它们匹配。

这种方法还可能会减慢启动画面的启动时间,这绝对是不可取的。虽然,我使用的方法都不是资源密集型的,所以它应该可以忽略不计,但我还没有测试过。

【讨论】:

  • 不。出于某种原因,我看到的都是黑色的——直到我的MainActivity 被加载。就好像根本没有启动画面一样。 getWindow().getDecorView() 并不像我最初预期的那样为空,但 SplashActivity 的背景似乎根本没有显示。无论如何都是好主意。
  • @KalaBalik 嗯,我原以为它至少会加载。您是否尝试设置 getWindow().getDecorView().setBackground() 而不设置边界?我认为在这种情况下启动画面会正常显示。
  • @KalaBalik 或者改用getWindow().setBackgroundDrawable()
  • 很遗憾,这两个建议都不起作用。结果与上面相同。难道只有当它包含的视图(组)被绘制时,窗口才被绘制?
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 2013-02-25
相关资源
最近更新 更多