【发布时间】:2018-10-17 11:03:18
【问题描述】:
我通过 Android Studio 生成了一个 96x96 的 SVG 图像。
然后,我在以下布局中应用 SVG 文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center">
<LinearLayout
android:padding="8dp"
android:id="@+id/linear_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:background="?selectableItemBackgroundBorderless"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/image_view"
android:duplicateParentState="true"
android:clickable="false"
android:layout_width="96dp"
android:layout_height="96dp"
android:scaleType="fitXY"
app:srcCompat="@drawable/ic_content_paste_black_24dp" />
<TextView
android:id="@+id/text_view"
android:layout_marginTop="8dp"
android:duplicateParentState="true"
android:clickable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tap_to_add_note"
android:textSize="24sp" />
</LinearLayout>
</LinearLayout>
请注意,
- 我在
ImageView中使用app:srcCompat - 我已添加
vectorDrawables.useSupportLibrary = true,如https://stackoverflow.com/a/35795933/72437 中所述 - 我使用
android:scaleType="fitXY",如https://stackoverflow.com/a/35930518/72437 中所述
在 API 27 和 API 16 中看起来都很模糊。
API 27
API 16
注意
您会注意到图标是灰色而不是黑色。这是因为我已经申请了
DrawableCompat.setTint(this.imageView.getDrawable(), greyIconColor);
但是,我不确定为什么 API 16 没有显示为灰色。
我的 build.gradle 文件看起来像
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.yocto.noteplus"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
dependencies {
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:gridlayout-v7:27.1.1'
SVG 文件
我的 SVG 文件内容是
<vector android:height="96dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="96dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19,2h-4.18C14.4,0.84 13.3,0 12,0c-1.3,0 -2.4,0.84 -2.82,2L5,2c-1.1,0 -2,0.9 -2,2v16c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM12,2c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM19,20L5,20L5,4h2v3h10L17,4h2v16z"/>
</vector>
补充说明
您可以运行实际设备来查看模糊效果,也可以使用 Logcat 中的截屏来查看模糊效果。
请问,为什么我的 SVG 图像在设备 API 16 和 API 27 中看起来很模糊?
【问题讨论】:
-
我在运行 API 16(Pixel 6)的 Android Studio 模拟器和另一个运行 API 27(Pixel 5X)的模拟器上尝试了您的布局和矢量可绘制,图像清晰。您能否 1) 更具体地说明您在哪里看到模糊图像?这些是真实的设备还是仿真?什么样的仿真或设备?,以及,2)可能会提出一个表现出模糊性的项目? 16 和 27 以外的 API 上的图像是否清晰?否则很难找到问题。
-
@Cheticamp 你需要在真机上运行,或者使用 Logcat 中的 Screen Capture 来查看模糊效果。查看我更新的问题。
-
我建议将矢量的
android:height/android:width更改为与android:viewportHeight/android:viewportWidth相同。在你的情况下android:height="24dp"和android:width="24dp"。图像仍将是96dpx96dp因为您将该大小应用于ImageView -
发现一部运行 API 16 的旧 LG 手机。不幸的是,该设备和屏幕截图中的图形看起来清晰锐利,因此问题不仅仅在于 API 16。跨度>
标签: android