我已经为应用程序的加载主题分配了可绘制资源。但是,可绘制资源中的位图已被裁剪,我不知道为什么。使用android:gravity =“ fill_horizontal”可以停止水平裁剪,但也可以更改图像的长宽比。
如何使用图像而不修剪边缘并保持其原始长宽比?
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- Launcher/splash theme. -->
<style name="AppTheme.Launcher">
<item name="android:windowBackground">@drawable/launch_screen</item>
<item name="android:adjustViewBounds">true</item>
</style>
</resources>
launch_screen.xml
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<!-- Background color-->
<item android:drawable="@android:color/white"/>
<!-- Splash Logo -->
<item>
<bitmap
android:src="@drawable/splash_screen"
android:gravity="center"/>
</item>
</layer-list>
Bitmap using---android:gravity="center"
Bitmap using---android:gravity="fill_horizontal"
临时解决方案: 我发现了一个不完善的解决方案。通过调整商品的高度和宽度,我设法确保图像保持在容器的边界内。图像在不同屏幕尺寸上的缩放比例不同。目前,此设置是我遇到的最好的解决方案。
修订了launch_screen.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- Use android:opacity=”opaque” to prevent black flash during theme
transition. -->
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<!-- Background color-->
<item android:drawable="@android:color/white"/>
<!-- Splash Logo -->
<item
android:height="400dp"
android:width="400dp"
android:gravity="center">
<bitmap
android:src="@drawable/splash_screen"
/>
</item>
</layer-list>
答案 0 :(得分:0)
以此更改您的launch_screen.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:width="220dp" android:height="220dp">
<bitmap
android:src="@drawable/splash_screen"
android:gravity="center"/>
</item>
</layer-list>
编辑:我更新了代码,请尝试一下。
答案 1 :(得分:0)
通常位于 C:\ Users \ username \ AndroidStudioProjects 的AndroidStudioProjects文件夹中,您会找到可绘制尺寸的文件夹。
Dimensions
- LDPI:
- Portrait: 200x320px
- Landscape: 320x200px
- MDPI:
- Portrait: 320x480px
- Landscape: 480x320px
- HDPI:
- Portrait: 480x800px
- Landscape: 800x480px
- XHDPI:
- Portrait: 720px1280px
- Landscape: 1280x720px
- XXHDPI
- Portrait: 960x1600px
- Landscape: 1600x960px
- XXXHDPI
- Portrait: 1280x1920px
- Landscape: 1920x1280px
使用以下尺寸调整原始图像的尺寸,然后将其放置在正确的文件夹中。 我还看到您的图像是带有白色背景的徽标,因此您只需在诸如photoshop之类的图像编辑器中使徽标透明即可。
然后在您的可绘制文件夹中创建一个可绘制对象
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@color/color1"/> <-- this is the background color in your splashscreen.
<item>
<bitmap
android:gravity="top"
android:src="@drawable/splashlogo"/> <-- your transparent logo.
</item>
</layer-list>
然后在您的值文件夹中创建样式-> styles.xml
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/splash_screen</item>
</style>
最后将主题样式添加到清单中
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme" <-- your splashscreen theme style.
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
PS:确保已为启动屏幕创建了一个活动,并在onCreate中启动了打开MainActivity的意图。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
}