如何在启动画面中定位位图

时间:2016-06-17 11:57:07

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

逗人,

我有一个方形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将其定位在屏幕顶部最大的sqaure中。

我的问题是:我可以在启动画面中模拟片段的位置。我希望启动画面中的title.png和titleFragment中的title.png是一致的。我已经使用了splash.xmlandroid:gravity="top")中的相关行,但无济于事。

编辑:以下是一些截图。第一个是显示启动画面:

SplashActivity

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

MainActivity

1 个答案:

答案 0 :(得分:1)

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

您应该可以做的是,不是在主题中设置窗口背景(如正确的方式 Splash Screens 建议),在SplashActivity中设置窗口背景。这样,您可以调整背景drawable的边界以匹配屏幕的大小:

@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的缩放类型以使其匹配。

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