显示的启动画面徽标质量不佳

时间:2018-07-02 10:54:48

标签: android android-layout svg icons imagemagick

我正在构建一个具有:

的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本身?

2 个答案:

答案 0 :(得分:1)

@hrk唱歌是正确的,甚至不必费力尝试正确显示位图。您将始终获得低分辨率图像。最好的办法就是在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。然后我像这样将其放入初始屏幕可绘制中,效果很好:

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

我的代码实际上只是在下图中绘制三角形,但是在这里您可以看到可以实现的目标。与使用位图时获得的像素化边缘相反,分辨率终于达到了极好的水平。

my apps splash screen

答案 1 :(得分:0)

您应该使用矢量而不是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/