【问题标题】:Splash Screen logo displayed is of poor quality显示的启动画面标志质量很差
【发布时间】:2018-12-10 14:02:32
【问题描述】:

我正在构建一个具有 :

的 Android 应用程序

启动画面,显示应用程序的标志

什么是有效的:

如果我在 SplashScreenActivity 的布局中设置 ImageView,屏幕显示得非常好,并且会根据需要转到 FirstActivity。

什么不是:

但是,这不是正确的方法,因为它会在应用程序启动时产生延迟,因为布局正在膨胀。我使用了以下推荐的方法:

splash.xml

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

styles.xml

<style name="Splash" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/splash</item>
</style>

AndroidManifest.xml

<application
    android:theme="@style/Splash">
  • 当我尝试从 mipmap 文件夹设置位图 src 时,它产生了一个小图像。

  • 因为我也有徽标的 SVG 文件,所以我尝试使用 Vector Asset 生成可绘制但位图 src 需要图像并且应用程序崩溃了。

  • 然后我尝试使用 ImageMagick 和 InkScape 从 SVG 生成 PNG 和其他工具及其推荐的高质量图像选项。

但它仍然不如使用带有 Vector Drawable 作为其源的 ImageView 那样清晰,最后我现在想不出任何其他方式。

那么,我怎样才能获得与所有其他应用程序一样的图像质量?还有什么方法可以让位图使用 SVG 本身?

【问题讨论】:

  • 尝试使用不同分辨率的 GIMP 生成 PNG --> 我正在使用的是:830x830 (xxhdpi) 553x553 (xhdpi) 415x415 (hdpi)

标签: android android-layout svg icons imagemagick


【解决方案1】:

@hrk sing 是对的,甚至不必费心尝试正确显示位图。你总是会得到低分辨率的图像。您能做的最好的事情就是在诸如vectr之类的页面上在线创建一个vectordrawable。我所做的是直接在 xml 中简单地缩放 vectordrawable,它最终完美地适用于我的启动画面

<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。然后我就像这样放入我的启动画面drawable,效果很好:

<?xml version="1.0" encoding="utf-8"?>

<!-- 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>

我的代码实际上只是在下图中绘制了三角形,但在这里你可以看到你可以用它来实现什么。与使用位图时得到的像素化边缘相比,分辨率终于很好了。

【讨论】:

  • 很高兴能提供帮助。你可能会发现你在 API 21 到 23 上得到了一个扭曲的图像。检查这个答案的更完整版本来解决这个问题stackoverflow.com/a/60124091/10637400
【解决方案2】:

你应该使用矢量而不是 png 或 jpg

在android中使用向量

app:srcCompat="@drawable/logo"

您需要将vectorDrawables.useSupportLibrary = true 添加到您的build.gradle 文件中

 // Gradle Plugin 2.0+  
   android {  
   defaultConfig {  
   vectorDrawables.useSupportLibrary = true  
  }  
}  

了解更多信息和用法请参阅: https://www.androidhive.info/2017/02/android-working-svg-vector-drawables/

【讨论】:

  • 位图需要 android:src 属性。您提到 android:srcCompat 应该是 app:srcCompat 。并且设置 srcCompat 没有效果,因为位图需要并使用 src 。
  • 你可以使用 Imageview 代替位图,它支持 app:srcCompat
  • ImageView 需要布局。设置布局不是启动画面的推荐方式。问题中明确提到了。
  • 对不起,我没看到,也许现在我认为您可以使用 Photoshop 或尺寸更合适的 gimp 创建自己的徽标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多