zoukankan      html  css  js  c++  java
  • drawable SVG 使用

    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 参考
  • 相关阅读:
    论单页Web应用和RESTful架构
    [译]作为一个web开发人员,哪些技术细节是在发布站点前你需要考虑到的
    JavaScript模块化规范
    一个Option请求引发的深度解析
    读《JavaScript语言精粹》的一些感言
    深圳积分入户经验之谈
    windows下的node-canvas历程
    linux服务器部署.net core 3.1
    Windows下Redis的安装、配置
    Linux Centos 安装宝塔面板一句命令解决
  • 原文地址:https://www.cnblogs.com/mamamia/p/10026435.html
Copyright © 2011-2022 走看看