我无法在Android上修复扭曲的闪屏问题。我正在使用React native。请注意,这只发生在某些设备上,例如,我有一个带有Android版本4.2.2的三星(闪屏没有扭曲),而拥有8+版本的Android版的三星则有一个扭曲的闪屏。
下面是附加的扭曲和未扭曲的闪屏:
第一张图片是“NOT DISTORTED”显示
第二张图片是“DISTORTED”显示
的链接答案 0 :(得分:0)
使您的imageview的高度和宽度相等 意味着两者都需要具有相同的大小
答案 1 :(得分:0)
为所有屏幕尺寸和您正在使用的设计提供资源?你可以发布你的xml吗?
答案 2 :(得分:0)
按照步骤:
1)仅使用Icon并将Background设置为渐变可绘制。
2)白色图标的宽度和高度应相等。使用图标并放置在XHDPI和XXHDPI可绘制文件夹中。
布局设计:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/sample">
<ImageView
android:layout_width="90dp"
android:layout_height="90dp"
android:background="@android:color/white"
android:layout_centerHorizontal="true"
android:layout_marginTop="90dp"/>
</RelativeLayout>
可绘制的背景sample.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<gradient
android:startColor="#00ff00"
android:endColor="#99ff99"
android:angle="90"/>
<corners
android:radius="0dp"/>
</shape>
具有多个屏幕支持的示例输出:
答案 3 :(得分:0)
经过编辑的解决方案,可使您的SplashScreen在包括API21到API23在内的所有API上都看起来不错
首先阅读this文章,并遵循制作初始屏幕的良好方法。
如果徽标变形或不合适,而您仅针对APIs24 +,则可以直接在其xml文件中直接按比例缩小矢量可绘制对象,如下所示:
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"
android:viewportWidth="640"
android:viewportHeight="640"
android:width="240dp"
android:height="240dp">
<path
android:pathData="M320.96 55.9L477.14 345L161.67 345L320.96 55.9Z"
android:strokeColor="#292929"
android:strokeWidth="24" />
</vector>
在上面的代码中,我将在640x640画布上绘制的可绘制对象重新缩放为240x240。然后像这样将其放在我的启动屏幕可绘制对象中,效果很好:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"
android:paddingBottom="20dp" android:paddingRight="20dp" android:paddingLeft="20dp" android:paddingTop="20dp">
<!-- The background color, preferably the same as your normal theme -->
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item
android:drawable="@drawable/logo_vect"
android:gravity="center">
</item>
</layer-list>
我的代码实际上仅在底部的图片中绘制三角形,但是在这里您可以看到可以实现的目标。与使用位图时获得的像素化边缘相反,分辨率最终是很大的。因此,请务必使用可绘制的矢量(有一个名为vectr的网站,我曾用它来创建我的网站,而无需下载专门软件。)
编辑以使其也可以在API21-22-23上使用
虽然以上解决方案适用于运行API24 +的设备,但在将应用程序安装为运行API22的设备后,我感到非常失望。我注意到启动画面再次试图填充整个视图,看起来像狗屎一样。经过半天的折磨,我终于通过纯粹的意志力强行提出了解决方案。
您需要创建第二个文件,其名称与splashscreen xml完全一样(假设为splash_screen.xml),并将其放入2个名为drawable-v22和drawable-v21的文件夹中,这些文件将在res /文件夹中创建(为了看到他们,您必须将项目视图从Android更改为Project)。每当相关设备运行与可绘制文件夹see this link中的-vXX后缀相对应的API时,这便可以告诉您的手机重定向到这些文件夹中放置的文件。将以下代码放在在这些文件夹中创建的splash_screen.xml文件的“层”列表中:
<item>
<shape>
<size android:height="120dp" android:width="120dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
<!-- Your product logo - 144dp color version of your app icon -->
<item android:gravity="center">
<bitmap android:gravity="center"
android:src="logo_vect"/>
</item>
由于这些API的某些原因,您必须将可绘制对象包装在位图中,以使其起作用并进行喷射,最终结果看起来相同。问题是您必须使用带有常规可绘制文件夹的方法,因为第二个版本的splash_screen.xml文件将导致您的启动屏幕在运行高于23的API的设备上根本不显示。您可能还必须放置android将splash_screen.xml的第一个版本默认为可找到资源的最近的drawable-vXX文件夹作为android。终于对我有用