Android 启动画面中心图像

Dar*_*g8r 4 android android-layout android-drawable

我有一个带有启动屏幕视图的应用程序,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/black">
    <ImageView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/splash2"
        android:scaleType="centerInside"
        android:adjustViewBounds="true"
        />
    <TextView
        android:id="@+id/txtVersion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:textSize="20dip"
        android:visibility="invisible"
        android:text="Version "/>
    <LinearLayout
        android:id="@+id/lvSplashInfo"
        android:layout_width="fill_parent"
        android:layout_height="120dp"
        android:layout_marginRight="40dp"
        android:layout_marginLeft="40dp"
        android:layout_alignParentBottom="true"
        android:orientation="vertical"
        android:visibility="invisible"
        android:background="@android:color/black">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="bleh"
            android:layout_margin="5dp"
            android:layout_gravity="center_horizontal"
            android:textColor="@android:color/white"/>
        <TextView
            android:id="@+id/txtPercent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="0% of the total"
            android:layout_margin="5dp"
            android:textSize="18sp"
            android:gravity="center_horizontal"
            android:textColor="#9DBA32"/>
        <TextView
            android:id="@+id/txtFilename"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="File name: xxxxx"
            android:layout_margin="5dp"
            android:textSize="18sp"
            android:visibility="invisible"
            android:gravity="center_horizontal"
            android:textColor="@android:color/white"/>
    </LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

它呈现缩放并居中到屏幕中的图像。不幸的是,这对我们来说效果不佳。在加载视图之前,它会导致轻微的白色闪烁。我的解决方案是使用活动样式。效果很好,除了我似乎无法居中和缩放图像。我可以轻松地将其居中,但它比屏幕更宽。这是我的 xml drawable:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@android:color/black"/>

    <item>
        <bitmap
            android:gravity="center|bottom|clip_vertical"
            android:src="@drawable/splash2"
            />
    </item>

</layer-list>
Run Code Online (Sandbox Code Playgroud)

如何缩放并居中该 splash2 图像?

小智 11

您可以在 Photoshop 中制作图像,将其放入 xml 中,然后将整个内容居中,但我建议在加载应用程序时使用启动画面,因为如果您使用计时器来设置它,则会浪费用户的时间......就是这样我确实有一个像这样的启动画面: 在此处输入图片说明

首先,您必须添加一个新的Java class,我们称之为SplashActivity.java

您不必添加太多内容:

package YOUR-PACKAGE-NAME;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class SplashActivity extends AppCompatActivity {

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

    Intent i = new Intent(SplashActivity.this, MainActivity.class);
    startActivity(i);
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

在那之后,你必须有一个用于启动画面的可绘制对象,因为如果你有一个布局,它会在应用程序已经加载时出现,所以在启动画面中将没有任何意义......转到drawable文件夹并创建一个名为background_splash.xml. 你在那里添加

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center">
<item>
<bitmap
        android:src="@drawable/ic_splash"
        />
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

ic_splash我用 Photoshop 创建的图像在哪里,分辨率为 1280x720,然后创建了一个 9-patch 图像......(你必须有 9-patch 图像,而不是在不同的设备上有正常的、小的和裁剪的图像......)所以去在这里生成你的......创建它,下载它并将所有文件夹(mdpi, hdpi等)复制到你的res文件夹...... 现在,转到你的values/styles.xml并添加NoActionBar样式

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/background_splash</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后打开您Manifest.xml的活动并使用intent-filter.

你的应该是

<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

因此,将.MainActivitywith.SplashActivity和 the替换.MainActivity为另一个活动,因此最后您应该至少在以下位置声明两个活动Manifest.xml

<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"
        android:label="@string/app_name"
        android:icon="@drawable/ic_launcher" or "@mipmap/ic_launcher"
        android:theme="@style/AppTheme">

    </activity>
Run Code Online (Sandbox Code Playgroud)

祝你好运!:) 如果有什么问题,请问:)