Android会使用一些规则来去帮我们匹配最适合的图片。什么叫最适合的图片?比如我的手机屏幕密度是xxhdpi,那么drawable-xxhdpi文件夹下的图片就是最适合的图片。因此,当我引用android_logo这张图时,如果drawable-xxhdpi文件夹下有这张图就会优先被使用,在这种情况下,图片是不会被缩放的。但是,如果drawable-xxhdpi文件夹下没有这张图时, 系统就会自动去其它文件夹下找这张图了,优先会去更高密度的文件夹下找这张图片,我们当前的场景就是drawable-xxxhdpi文件夹,然后发现这里也没有android_logo这张图,接下来会尝试再找更高密度的文件夹,发现没有更高密度的了,这个时候会去drawable-nodpi文件夹找这张图,发现也没有,那么就会去更低密度的文件夹下面找,依次是drawable-xhdpi -> drawable-hdpi -> drawable-mdpi -> drawable-ldpi。

规则:先找比自己大的(从小大到大找),再打比自己小的(从大到小找)。

从Android API 24(安卓7.0)开始,自定义Drawables类可以最终在XML中使用(仅在您的包中)。

SVG 使用

最近公司的UI突发奇想的又给了我们Android团队几张SVG的图片,让我们显示在某页面上。经过部门同事的一番努力最终还是将他们显示在屏幕上了。 但是还是有几个小问题

1 UI给的SVG图片应该显示的是白色,但是在Android设备上显示的确实黑色
2 在某些手机上SVG会出现锯齿,给用户造成的感觉就是字体style都不一样 问题的原因就是我的同事是直接在将AS中将SVG转化为VectorDrawable,然后直接使用ImageView显示。 具体如何转化网上一大堆,就不多费口舌了。转化后的文件如下所示: <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="124dp"
android:viewportHeight="110.0"
android:viewportWidth="110.0">
<path
android:fillColor="#FF000000"
android:pathData="M66.38,69.35a2.53,2.53 0,0 1,-0.74 1.82,2.42 2.42,0 0,1 -1.8,0.77H43.67a2.36,2.36 0,0 1,-1.82 -0.79,2.66 2.66,0 0,1 -0.72,-1.85A12,12 0,0 1,42 64.58a13,13 0,0 1,2.35 -3.7A17,17 0,0 1,47.73 58a38.2,38.2 0,0 1,4 -2.23L55.46,54a18.19,18.19 0,0 0,2.69 -1.58,6.37 6.37,0 0,0 1.63,-1.66 3.85,3.85 0,0 0,0.55 -2.11,3.24 3.24,0 0,0 -1.85,-3 10,10 0,0 0,-4.73 -1q-1.25,0 -2.26,0.1a10.2,10.2 0,0 0,-2 0.38,13.47 13.47,0 0,0 -1.92,0.74A17.78,17.78 0,0 0,45.55 47a2.36,2.36 0,0 1,-1.25 0.38,2.49 2.49,0 0,1 -1.85,-0.7 2.26,2.26 0,0 1,-0.7 -1.66A2.89,2.89 0,0 1,43 42.66a14.8,14.8 0,0 1,3.43 -1.87,17.13 17.13,0 0,1 4,-1.08A25.35,25.35 0,0 1,54 39.4a18.49,18.49 0,0 1,4.85 0.6,11.83 11.83,0 0,1 3.82,1.75 8.08,8.08 0,0 1,2.5 2.86,8.35 8.35,0 0,1 0.89,3.91 8.44,8.44 0,0 1,-0.62 3.34,9.52 9.52,0 0,1 -1.8,2.74A14.48,14.48 0,0 1,60.74 57a43,43 0,0 1,-4 2.21q-2,1 -3.62,1.82a20.3,20.3 0,0 0,-2.83 1.75,8.16 8.16,0 0,0 -1.85,1.87 3.71,3.71 0,0 0,-0.67 2.14H63.83a2.39,2.39 0,0 1,1.82 0.77A2.58,2.58 0,0 1,66.38 69.35Z" />
</vector> 一般情况下UI给我们的SVG图片可能需要我们手动的修改一下,比如我们需要将fillColor改为“#FFFFFFFF”这样字体才能显示为白色。并且需要将width和height设置为120dp,否则会有锯齿 最后再提一点因为SVG是在Android 5.0之后才支持的,所以如果想支持5.0之前的版本,最好使用兼容库。具体使用如下: 1 在build.gradle的defaultConfig中添加 vectorDrawables.useSupportLibrary = true
1
2 在xml文件中的ImageView控件上,不要使用 src 属性,应该使用 app:srcCompat 属性 <ImageView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_widthPercent="10%"
app:layout_heightPercent="10%"
app:srcCompat="@drawable/ic_lesson_two"
/> 3 不要忘记Activity也需要继承AppCompatActivity 另外:如果想在Activity代码中动态设置SVG(VectorDrawable), 需要动态添加兼容 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); https://blog.csdn.net/qq_19560943/article/details/54410857?utm_source=blogxgwz6 参考

drawable SVG 使用的更多相关文章

  1. Android APK开发 Drawable文件夹下的自定义Drawable文件

    版本:2018/2/11 Drawable的分类 自定义Drawable SVG矢量图 个人总结的知识点外,部分知识点选自<Android开发艺术探索>-第六章 Drawable 1.Dr ...

  2. [Jenkins] 解决 Gradle 编译包含 SVG Drawable 出现异常

    异常信息 java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of th ...

  3. 【转】Android应用开发之PNG、IconFont、SVG图标资源优化详解

    1 背景 最近因为一些个人私事导致好久没写博客了,多事之年总算要过去了,突然没了动力,所以赶紧先拿个最近项目中重构的一个小知识点充下数,老题重谈. 在我们App开发中大家可能都会有过如下痛疾(程序员和 ...

  4. Android Drawable资源

    Android实现应用d动画效果:比如App第一次打开的开始动画等 有两种:GIF动画和代码实现. 第一种:借助于Gif制作工具软件实现.一般是和第三方开源的GifView(https://githu ...

  5. svg矢量图绘制以及转换为Android可用的VectorDrawable资源

    项目需要 要在快速设置面板里显示一个VoWiFi图标(为了能够区分出来图形,我把透明的背景填充为黑色了) 由于普通图片放大后容易失真,这里我们最好用矢量图(SVG(Scalable Vector Gr ...

  6. 有关Color和Drawable你所不知道的那些内容

    Android开发中,我们经常会用到Color或Drawable,有时他们是可以混用的,有时却有严格的区别. Drawable 体系结构 Drawable是可绘制物件的一般抽象.与View不同,Dra ...

  7. 创建Material Design风格的Android应用--使用Drawable

    下面Drawables的功能帮助你在应用中实现Material Design: 图片资源着色 在android 5.0(api 21)和更高版本号,能够着色bitmap和.9 png 通过定义透明度遮 ...

  8. Android SVG矢量资源的使用方法

    VectorDrawable 与 SVG Android 5.0(Lollipop, API 21)后,新增了<vector>标签,以VectorDrawable的形式支持SVG类型矢量图 ...

  9. Android使用SVG矢量动画(二)

    上篇我们学习了怎么显示SVG矢量图像,当然还有一个更强大的功能,就是让SVG图像动起来,先上一张效果图吧: 要实现上述动画效果,就得用AnimatedVectorDrawable这个类了,它就是负责V ...

随机推荐

  1. TypeError: this.setDynamic is not a function

    启动项目npm run serve 报错 Module build failed (from ./node_modules/_babel-loader@8.0.6@babel-loader/lib/i ...

  2. 深入学习Mybatis框架(一)- 入门

    1.什么是Mybatis? Mybatis是一个优秀持久层框架,提供了对数据库的一系列操作(增删改查).Mybatis可以避免重复的写JDBC代码,让我们以较少的代码实现对数据库的操作,从而提高开发效 ...

  3. odoo 常用模型的简写

    <act_window>是窗口操作模型ir.actions.act_window <menuitem>是菜单项模型ir.ui.menu <report>是报表操作模 ...

  4. apache启动错误 AH00072: make_sock: could not bind to address [::]:443 windows系统端口/进程查看

    1. netstat -ano|findstr " 2. tasklist|findstr "

  5. Linux (Ubuntu)使用vi和vim方向键变成了ABCD

    ubuntu下 vi输入方向键会变成ABCD,这是ubuntu预装的是vim tiny版本,安装vim full版本即可解决. 首先,卸载了原有的vim $ sudo apt-get remove v ...

  6. 使用cJSON解析JSON

    cJSON获取数组元素的每个值 { "operType": 0x5, "field": ["time","matchRule&qu ...

  7. C# NET 微信临时素材上传

    最近在做这个,一开始也是不明白为什么给个URL带着两个参数就直接上传了,网上看了很多都是PHP,但是PHP没看过是不会 的 所以就一直在找网上什么Demo之类的讲解,最后还是不错找到了一个比较好理解的 ...

  8. F - One Occurrence CodeForces - 1000F (线段树+离线处理)

    You are given an array aa consisting of nn integers, and qq queries to it. ii-th query is denoted by ...

  9. 无法连接Web 的 IIE 问题

    我一个解决方案里有两个项目在一块,其中一个就突然凉凉了 然后在网上找了很多,基本都是删除vs文件,在启动,幸运的是,并没什么用. 最后我用了这个: 打开Visual Studio, 右键单击网站 &g ...

  10. .NET Core 3时代!如何使用DevExpress WPF创建应用

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...