我正在构建一个具有:
的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本身?
答案 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>
我的代码实际上只是在下图中绘制三角形,但是在这里您可以看到可以实现的目标。与使用位图时获得的像素化边缘相反,分辨率终于达到了极好的水平。
答案 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/