首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageView是在较旧的Android设备上像素化的。

ImageView是在较旧的Android设备上像素化的。
EN

Stack Overflow用户
提问于 2016-01-11 23:06:50
回答 2查看 3K关注 0票数 4

问题

我的XML中有这样一个ImageView:

代码语言:javascript
复制
                <ImageView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:src="@drawable/ic_person_add"
                android:alpha="0.87" />

ic_person_add是普通的材料设计矢量

在我的Nexus 5 (Android 6)上,图标缩放得很漂亮,而且非常锋利:

然而,在Note 2(Android4.4)上,图标实际上是像素化和丑陋的:

如何使每个设备上的ImageView (以向量作为src)锐利?最好有唯一的xml解决方案。

我已经发现:

  • 添加android:adjustViewBounds="true" ->没有任何作用
  • ImageView图像看起来像像素化和低质量 ->不适用于向量
  • 设置BitmapFactory.inscaled=false ->不仅适用于xml,而且我也不知道如何将其放在自定义ImageView类中。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-12 09:31:55

真正的问题不是Note 2的DPI,而是Android版本。

发布了这样的声明:

一旦您在res/drawable中有了vectorDrawable映像,Gradle插件将在构建期间自动生成API级别20及以下的栅格PNG映像。

因此,我的安卓6设备确实有一个矢量图形作为ImageView的来源,所以它成功地把它放大得完美无缺。对于Note 2(运行在比Android5OS更旧的操作系统上),Android自动将我的Drawables文件夹中的Vectorgraphic转换为PNG。

可以更改VectorXML中转换的PNG的大小。

代码语言:javascript
复制
android:height android:width

要达到dp中的大小,您的矢量图需要显示在预API 20设备上。因此,在我的例子中(最大为100 to ),我不得不将值更改为:

代码语言:javascript
复制
<vector android:height="100dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="100dp">
票数 7
EN

Stack Overflow用户

发布于 2016-01-11 23:26:47

Nexus 5密度桶是xxhdpi,而Note 2(基于)是xhdpi。这表明您的xxhdpi位图的大小是正确的(或者至少是在所需的大小上),而xhdpi则不是。

如果您使用的是最近版本的Android提供的自动转换,您可能需要尝试手动对矢量图像进行栅格化,以确定这是否解决了问题。

如果您使用光栅图形,您可能需要添加一些视觉元素到每个密度变量,以获得一个想法,其中一个实际使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34732803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档