精华内容
下载资源
问答
  • 用CSS设计垂直间距优化文字界面

    千次阅读 2008-03-11 15:03:00
    我在 Web 2.0中文Typography设计 一文中已经提到,垂直间距的设置是文字布局的关键,也是比较复杂的地方,我们需要通过计算来实现精确布局,达到一种和谐的美,下面我将具体展示如何使用CSS设置垂直间距达到精确定位...

    我在 Web 2.0中文Typography设计 一文中已经提到,垂直间距的设置是文字布局的关键,也是比较复杂的地方,我们需要通过计算来实现精确布局,达到一种和谐的美,下面我将具体展示如何使用CSS设置垂直间距达到精确定位文字布局的目的。

    首先我们需要一个拥有基准线的文档,这样就可以衡量我们的字里行间是否真正精确无误,在这里我设置了 24px 的行距以便测试。

    拥有基准线的文档

    首先你需要取消所有的浏览器默认样式。

    *{
        margin : 0;
        padding : 0;
    }
    

    然后设置你希望的文档的具体内容的一般性字体大小,我这里采用 13px

    body{
        font-size : 0.8125em;
    }
    

    为了使我的 13px 的字体嵌入到 24px 的行距中,我应该如何做呢?是的,设置 line-height

    p{
        line-height : 1.846em;
    }
    

    我希望在每个段落之后能够有一定的空白,使我的每个段落能够更加清晰,所以我应当设置 margin-bottom ,它必须是 1.846em 的整数倍,才能使后一段落仍然嵌在 24px 的行距中。

     

    p{
        line-height : 1.846em;
        margin-bottom : 1.846em;
    }

     

    注意,整体段落的整齐划一是最重要的,其他如标题,分割线之类应当穿插在其中,所以设置标题等元素时需要进行一番计算。首先你需要确定你想要的标题的字体大小和行高,因为它们将决定你的文字看起来有多大相隔多少,但是注意应当使你的插入的元素的行高均以 24px 为基准,设置以它为整数倍的值为插入元素的行高。如 h1 大小我选择 1.6em ,行高就需要 1.154emh2 大小选择 1.4em ,行高就需要 1.319em 。如果我需要在 h2 与段落之间有比段落之间更大的宽度,我希望 margin-top2em ,那么计算得到的 margin-bottom 就应当是 0.667em ,以使它们相加后能够成为 24px 的倍数。所以我将在 h1h2 中应用以下样式:

    h1{
        font-size : 1.6em;
        line-height : 1.154em;
        margin : 1.5em 0 0.808em 0;
    }
    
    h2{
        font-size : 1.4em;
        line-height : 1.319em;
        margin : 2em 0 0.667em 0;
    }
    

    最后,我们就能够看到一个嵌入的恰到好处的文章内容了。

    良好的文档行距

    本文首发于:http://www.lunaticsun.com/article/typography-vertical

    展开全文
  • 文字切割算法-投影切割优化

    千次阅读 2018-05-16 12:28:53
     在上文(文字切割算法-基于投影的切割)中发现切割结果并不是很理想,所以在本文提出优化算法对结果进行进一步处理。本算法的解决思路很简单,即针对已暴露出的问题进行解决,对于未暴露的问题就无能为力了。所以...

    前言

            在上文(文字切割算法-基于投影的切割)中发现切割结果并不是很理想,所以在本文提出优化算法对结果进行进一步处理。本算法的解决思路很简单,即针对已暴露出的问题进行解决,对于未暴露的问题就无能为力了。所以算法的鲁棒性并不是很好,但是简单易实现。

    发现问题

             对基于投影的切割结果进行观察,可以将问题总结为三类。

    整体连接

    整体连接图

             多个文字连接在一起

    左右结构分开

    左右结构分开图

             左右结构的文字被切割成两个字

    左右结构分开后连接

    左右结构分开连接图

             左右结构的文字分开后,又与前后相邻文字相连

     

    解决问题

    整体连接

             由于汉字是方块字,可以认为每个字的长宽比例都是差不多的,基本都是1:1(金龙鱼调和…呸)。对于整体连接在一起的文字,可以先计算整体的长宽比。如果比例是接近于整数的(±0.2),则认为这是整体连接在一起的多个字。再计算每个字的平均长度进行切割,就可以得到一个比较不错的结果。

    整体连接说明图

           如上图,这是四个字连在一起的。长宽比:104/27≈3.85,3.85>4-0.2所以我们认为它是4个字。则平均宽度:104/4=26,按照26*27的宽长进行切割,就可以得出结果。(这里的长宽比是:宽度/长度)

    整体连接解决结果图

     

    左右结构分开

             由于左右结构分开后,两张图片的长宽比与数字符号的长宽比相似。所以我们无法判断到底是偏旁还是符号,这样就无法进行连接。这个问题将在以后提出识别算法对图片进行识别后解决。

    左右结构分开实例图

    如上图,由于无法识别图片内容,所以无法判断到底是“7”与“阝”连接,还是“阝”与“艮”连接。

    左右结构分开后连接

             采用整体连接的解决思路,先计算长宽比,如果发现长宽比不是在整数附近的(>±0.2),则认为这是左右结构分开后连接的。因为这种情况都是两张图,所以在发现第一张是分开后连接的,则将这张图先以1:1进行切割,再将剩下的部分记录。如果这张图相邻的下一张也被判断为是分开后连接的,则将上一张图剩下的部分与这张图的开头相连接,再进行1:1切割。这样就可以得到一个不错的结果。

    左右结构分开连接图

             如上图,先对第一张进行1:1切割,即按照27*27的大小从开头逐步向后切割,记录最后剩下的部分“丬”。再判断下一张图,发现也是分开后连接的,则按照27*27的大小从末尾逐步向前切割,得到剩下的部分。最后将这两个剩下的部分进行连接,得到一个完整的“北”。

    (当然这里要求在投影切割时记录图片两两之间的距离,这样才能还原被切割后的图片)

    切割结果如下:

    分开连接结果图

     

    结果

            在采用上述优化算法后,发现切割结果有了显著的成效。但是还是会存在一些不足,这些问题会在以后提出识别算法后进行优化。文字切割出来后,我们可以通过图片相似度比对算法对图片特征进行提取,以进行识别。

    整体结果图

    项目源码:我的github(https://github.com/printlin/tmOcr

     

    展开全文
  • 对天猫平台的企业信息采集下来进行结构化处理,提取出文字信息后汇总进Excel作为交付文件。 主要的功能设计如下: 1、程序能够自动读取企业工商信息图片所在的文件夹路径,并从文件夹路径中顺序取出图片进行识别,...

     

    一、需求分析

    对天猫平台的企业信息采集下来进行结构化处理,提取出文字信息后汇总进Excel作为交付文件。

    主要的功能设计如下:

    1、程序能够自动读取企业工商信息图片所在的文件夹路径,并从文件夹路径中顺序取出图片进行识别,最终的识别结果以一份汇总的Excel交付。

    2、因为天猫平台公示的图片内容没有固定格式,所以需要程序能匹配不同格式的图片内容提取信息。

    3、能够提取出图片中的企业注册号、企业名称数据项,企业注册号、企业名称数据项要进行分析处理。

    4、识别准确率需要保证在95%以上。

    5、识别速度保持在60秒识别50张图片。

    二、本程序处理图片方面的关键模块

    1、对图片进行切割:

    要求识别的文字信息“企业名称”“企业注册号”位于整个图片的其中一部分,把剩余部分切除,只留下关键信息部分,不但可以提高识别速度,还可提升识别率。

    2、在进行图片的二值化时,有两种方式:

    (1)图片为彩色时,宜找到每个像素点合适的灰色度,因为每个像素点的灰色度不同程度上受到周边像素加权影响,从而影响整个图片的识别率。比如本像素点加上周围8个灰度值再除以9,算出其相对灰度值。

    (2)图片为黑白色时,宜采用max-min方法对图片进行二值化。

    针对本程序识别的图片的黑白色对比明显,故采用max-min方法进行二值化。

    private static File binaryImage(File orcFile) throws IOException {

    // 获取图片的BufferedImage对象

    BufferedImage bi = ImageIO.read(orcFile);

    int h = bi.getHeight();// 获取图片的高

    int w = bi.getWidth();// 获取图片的宽

    BufferedImage nbi = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY);

    // 设置合适的经验阈值,对二值化的识别效果起重要作用

    int threshold = new Color(20, 20, 20).getRGB();// 阈值对应的颜色位于黑色文字和偏黑色背景颜色区间即可

    for (int x = 0; x < w; x++) {

    for (int y = 0; y < h; y++) {

    // 二值化處理

    if (bi.getRGB(x, y) > threshold) {

    int max = new Color(255, 255, 255).getRGB();

    nbi.setRGB(x, y, max);

    } else {

    int min = new Color(0, 0, 0).getRGB();

    nbi.setRGB(x, y, min);

    }

    }

    }

    // 将二值化处理后的图片放于D:\\orc_cut_binary下

    String orcFileName = orcFile.getName();

    String binaryDir = "D:\\orc_cut_binary";

    File dir = new File(binaryDir);

    // 存储目录不存在,则创建目录

    if (!dir.exists()) {

    dir.mkdirs();

    }

    File binaryFile = new File(binaryDir + "/" + orcFileName.substring(0, orcFileName.indexOf(".")) + "binary.png");

    ImageIO.write(nbi, "png", binaryFile);

    return binaryFile;

    }

    3、在选取二值化中的经验阈值,我们有以下思路:

    (1)二值化微分计算阈值

    (2)二值化类卷积的对梯度变化加强得到阈值

    对24位位图进行中值滤波会改变RGB各分量的值,所以图片的颜色会发生变化,但对于8位的位图,由于都是灰度的颜色,所以变化并不明显,而且滤波的窗口选的越大,对应的滤波效果的模糊度也会上升。

    4、增加图片的亮度:

    增加图片亮度可以使有些彩色图片的识别率大大增加,本程序别的图片为黑白照片,增加图片亮度提升的识别率并不乐观。

    5、对图片的边缘进行尖锐化处理:

    锐化可以快速调整图像边缘细节的对比度,并在边缘的两侧生成一条亮线一条暗线,使画面整体更加清晰。对于高分辨率的输出,通常锐化效果在屏幕上显示比印刷出来的更明显。在图片的Alpha值保持不变的情况下,本程序前期也进行了锐化处理,但效果并不明显,有时识别率甚至可能低于未锐化处理的图片。

    6、对图片进行平滑缩放:

    有时很多图片本身无法很好的被识别,但当放大适当倍数时,就可增强识别率,但这个“适当倍数”很难把控,它受诸多硬件因素影响,比如电脑配置、针式打印机打印连贯性差等问题。

     

     

    展开全文
  • Android 性能优化之界面优化

    千次阅读 多人点赞 2019-06-27 18:12:14
    性能优化涉及到的方面很多,比如启动优化、卡顿优化、内存优化、界面布局优化、稳定性优化、耗电优化、安装包大小优化等等。性能优化是每个开发者都需要关注的功课,本文从界面布局优化做一个总结。

    前言

    Android的性能优化是一个持续的过程,以发现问题、解决问题或者是组织Code Review为推动力去实施。性能优化涉及到的方面很多,比如启动优化、卡顿优化、内存优化、界面布局优化、稳定性优化、耗电优化、安装包大小优化等等。性能优化是每个开发者都需要关注的功课,本文从界面布局优化做一个总结。

    在查阅大量相关资料后,对界面优化的在此做个总结。本文会介绍一下卡顿产生原因、什么是过度绘制和渲染机制,然后介绍如何定位问题和解决问题,最后会总结出在实际开发过程中的使用建议。如有不足之处,欢迎提出宝贵建议。

    一、卡顿原因

    一个App的用户体验好不好,是否流畅不卡顿是一个很直观的感受。导致Android卡顿场景的原因有很多,比如界面绘制、应用启动、页面跳转、事件响应等等。

    这几种卡顿场景的根本原因可以分为两大类:

    • 界面绘制。主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。
    • 数据处理。导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。

    引起卡顿的原因很多,但不管怎么样的原因和场景,最终都是通过设备屏幕上显示来达到用户,归根到底就是显示有问题,所以,要解决卡顿,就要先了解 Android 系统的显示原理。

    二、Android 系统的显示原理

    Android 显示过程可以简单概括为:Android 应用程序把经过测量、布局、绘制后的 surface 缓存数据,通过 SurfaceFlinger把数据渲染到显示屏幕上, 通过 Android 的刷新机制来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递到系统层服务,系统层服务通过刷新机制把数据更新到屏幕上。

    我们都知道在 Android 的每个 View 绘制中有三个核心步骤:MeasureLayoutDraw。具体实现是从 ViewRootImp类的performTraversals() 方法开始执行,MeasureLayout都是通过递归来获取 View的大小和位置,并且以深度作为优先级,可以看出层级越深、元素越多、耗时也就越长。

    三、什么是渲染机制

    渲染操作通常依赖于两个核心组件:CPU与GPU。CPU负责包括Measure,Layout,Record,Execute的计算操作,GPU负责Rasterization(栅格化)操作。CPU通常存在的问题的原因是存在非必需的视图组件,它不仅仅会带来重复的计算操作,而且还会占用额外的GPU资源。
    渲染问题

    从上图可以得出结论:

    • CPU产生的问题:不必要的布局和失效(Layouts、Invalidations)
    • GPU产生的问题:过度绘制(overdraw)

    小结: 了解渲染机制,有助于我们了解卡顿的最终原因,方便找到解决问题的方向。

    为了能够使得App流畅,我们需要在每帧16ms以内处理完所有的CPU与GPU的计算,绘制,渲染等等操作。

    接下来介绍什么是“过度绘制”,避免了过度绘制,界面优化也就做到了。

    四、什么是过度绘制(定位问题)

    过度绘制(Overdraw)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的 UI 结构里面,如果不可见的 UI 也在做绘制的操作,会导致某些像素区域被绘制了多次,同时也会浪费大量的 CPU 以及 GPU 资源。

    在这里插入图片描述

    在Android开发人员选项中,找到“调试GPU过度绘制”,开启显示之后,手机会显示出蓝色、绿色、红色等色块。
    在这里插入图片描述

    其中蓝色、绿色、红色显示的就是过度绘制的区域。

    在官网的 Debug GPU Overdraw Walkthrough 说明中对过度重绘做了简单的介绍,其中屏幕上显示不同色块的具体含义如下所示:

    overdraw

    每个颜色的说明如下:

    • 原色:没有过度绘制(正常的绘制,只绘制了1次)
    • 蓝色:1 次过度绘制 (超过1次绘制是会显示)
    • 绿色:2 次过度绘制
    • 粉色:3 次过度绘制
    • 红色:4 次及以上过度绘制

    我们优化的目标是,减少红色,看到更多的蓝色。

    五、优化方法(解决问题)

    优化原则:减少布局层级、减少过度绘制、布局复用

    下面结合项目中的实际使用情况做的优化,同时也在Code Review后发现的做一个总结,Code Review时结合Android studio中的工具检测到的一些布局优化建议提示。(注:记一次CodeReview实例,请点击前往)

    1.移除默认的 Window 背景

    一般应用默认继承的主题都会有一个默认的 windowBackground ,比如默认的AppTheme主题:

       <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!--TODO:移除主题背景色,减少一次界面过度绘制-->
            <item name="android:windowBackground">@android:color/white</item>
        </style>
    

    但是一般界面都会自己设置界面的背景颜色或者列表页则由 item 的背景来决定,所以默认的 Window 背景基本用不上,如果不移除就会导致所有界面都多 1 次绘制。

    可以在应用的主题中添加如下的一行属性来移除默认的 Window 背景:

    <item name="android:windowBackground">@android:color/transparent</item>
    <!-- 或者 -->
    <item name="android:windowBackground">@null</item>
    

    或者在 BaseActivityonCreate() 方法中使用下面的代码移除:

    getWindow().setBackgroundDrawable(null);
    // 或者
    getWindow().setBackgroundDrawableResource(android.R.color.transparent);
    

    移除默认的 Window 背景的工作在项目初期做最好,因为有可能有的界面未设置背景色,这就会导致该界面显示成黑色的背景,如下图所示,如果是后期移除的,就需要检查移除默认 Window 背景之后的界面是否显示正常。

    在这里插入图片描述
    在这里插入图片描述
    原先的系统主题是白色,移除后就变为黑色,此时渲染的颜色也变了,减少一次过度绘制。只是这时需要在子布局中添加相应的背景色即可。

    2.移除XML布局文件中不必需的背景

    例如在布局文件中嵌套了RecyclerView,注意在item中需要用到背景色时再考虑添加背景色,这样可以减少一次过度绘制。简单的布局出现颜色上出现了过度绘制,可以先好排查是否在xml中或者代码中调用了多余的绘制。

    3.自定义控件使用 clipRect() 和 quickReject() 优化

    当某些控件不可见时,如果还继续绘制更新该控件,就会导致过度绘制。但是通过 Canvas clipRect() 方法可以设置需要绘制的区域,当某个控件或者 View 的部分区域不可见时,就可以减少过度绘制。

    先看一下 clipRect() 方法的说明:

    Intersect the current clip with the specified rectangle, which is expressed in local coordinates.

    顾名思义就是给 Canvas 设置一个裁剪区,只有在这个裁剪矩形区域内的才会被绘制,区域之外的都不绘制。

    这个项目中暂时没有用到,先记录于此,后期用到了再完善使用注意细节。

    可以参考一下其他人总结的使用方式:Android性能优化之渲染篇

    4.使用合理高效的布局

    (1)RecyclerView中的item的分割线处理

    一般的写法如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="8dp"
        android:background="@color/divider_gray">
    
        <LinearLayout
            android:padding="@dimen/mid_dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="@color/white">
    
            <ImageView
                android:id="@+id/iv_app_icon"
                android:layout_width="40dp"
                android:layout_height="40dp"
                tools:src="@mipmap/ic_launcher"/>
    
            <TextView
                android:id="@+id/tv_app_label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="@dimen/mid_dp"
                android:textColor="@color/text_gray_main"
                android:textSize="@dimen/mid_sp"
                tools:text="test"/>
        </LinearLayout>
    
    </LinearLayout>
    

    这种改变布局实现分割线的方式虽然很快捷方便,但是存在不少问题的:

    (1)加深了布局层级,和之前的布局相比多了一级

    在这里插入图片描述

    (2)多了 2 次过度绘制

    解决方式有两种:

    1. 一种是使用 RelativeLayout 将分割线添加在 item 的布局中,但是这样会导致布局复杂度增加,同时因为 RelativeLayout 布局的两次测量,也会延长 View 测量的时间,在解决这种需求时并不是一个好的方式。
    2. 另一种是使用 RecyclerViewaddItemDecoration(ItemDecoration decor) 方法添加分割线,这种方式在你自定义好一个分割线 ItemDecoration 时是很方便的,网上有很多关于这方面的例子(如果你使用 ListView 的话,则使用 setDivider(Drawable divider) 方法)。

    我们采用第二种解决方法,优化前后的对比如下:

    在这里插入图片描述

    优化后的布局 ImageView 和 item 背景区域均比优化前少了 2 次过度重绘,布局层级也没增加,需求也实现了。

    (2)使用TextView本身的属性同时显示图片和文字
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/batman"
            android:drawableLeft="@drawable/batman"
            android:drawableStart="@drawable/batman"
            android:drawablePadding="5dp">
    </TextView>
    

    在界面中有图片和文字的布局时,不一定要用LinearLayout或RelativeLayout来嵌套,直接用TextVeiw也能实现,这样减少一层嵌套,也更优雅。

    (3)用LinearLayout自带的分割线

    分割线在App经常会用到的,使用频率高到让你惊讶。但是LinearLayout有一个属性可以帮你添加分割线。下面的例子中,LinearLayout包含2个TextView和基于他们中间的分割线。

    LinearLayout自带的分割线
    1.创建分割线(用shape实现)

    下面是一个简单的shape divider_horizontal.xml用来当做分割线。

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
    
        <size android:width="@dimen/divider_width"/>
        <solid android:color="@color/colorPrimaryDark"/>
    
    </shape>
    

    2.将分割线放到布局属性divider

    <?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="wrap_content"
            android:orientation="horizontal"
            android:divider="@drawable/divider_horizontal"  //添加分割线图片
            android:dividerPadding="5dp"  //设置padding
            android:showDividers="middle"> //居中显示
    
    
        <TextView android:layout_width="0dp"
                  android:layout_weight="1"
                  android:layout_height="wrap_content"
                  android:gravity="center"
                  android:text="@string/batman"/>
    
        <TextView android:layout_width="0dp"
                  android:layout_height="wrap_content"
                  android:layout_weight="1"
                  android:gravity="center"
                  android:text="@string/superman"/>
    </LinearLayout>
    

    上面用到了三个xml属性:

    • divider -用来定义一个drawable或者color作为分割线

    • showDividers -设置分隔线的显示位置,有四个flag,分别是:begining(开始位置),end(结束位置),middle(中间,最常见的),none(不显示,也是默认值)

    • dividerPadding -给divider添加padding

      注:RadioGroup继续自LinearLayout,同时也具有上述属性。

      <RadioGroup  
      	android:id="@+id/rgSize"  
      	android:layout_width="wrap_content"  
          android:layout_height="wrap_content"  
      	android:divider="@drawable/shape_space"  
      	android:showDividers="middle"  
      	android:orientation="horizontal" >  
      </RadioGroup>  
      

      shape_space.xml

      <?xml version="1.0" encoding="utf-8"?>  
      <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">  
        
          <solid android:color="@android:color/transparent" />  
        
          <stroke  
              android:width="0dp"  
              android:color="@android:color/transparent" />  
        
          <size  
              android:height="8dp"  
              android:width="8dp" />  
        
      </shape> 
      

      实现效果为:
      RadioGroup

    六、总结

    最后总结一下在实际开发中 ,在写布局界面时的建议:

    1. 使用合适的布局

      三种常见的ViewGroup的绘制速度:FrameLayout> LinerLayout> RelativeLayout

      • ConstraintLayout是一个更高性能的消灭布局层级的神器

      • RelativeLayout会让子View调用2次onMeasureLinearLayout 在有weight时,也会调用子View2次onMeasure

      • RelativeLayout的子View如果高度和RelativeLayout不同,则会引发效率问题,当子View很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。

      • 在不影响层级深度的情况下,使用LinearLayoutFrameLayout而不是RelativeLayout

      • RecycleView中item 一般用ConstraintLayout或直接使用控件来布局,以业务需求为准。

      • 简单布局一般用FrameLayout来布局,同时结合include、merge来使用。布局文件都要有根节点,但android中的布局嵌套过多会造成性能问题,于是在使用include嵌套的时候我们可以使用merge作为根节点,这样可以减少布局嵌套,提高显示速率。

      小结:使用布局优先级:FrameLayout>ConstraintLayout>LinearLayout>RelativeLayout,结合效率和需求实现。

    2. 尽量减少使用wrap_content,推荐使用mathch_parent或固定尺寸配合gravity="center"

      因为 在测量过程中,match_parent和固定宽高度对应EXACTLY,而wrap_content对应AT_MOST,这两者对比AT_MOST耗时较多。

    3. 在需要的地方添加渲染背景,外层不渲染,在内层需要的地方渲染。

    4. 文本控件,需要考虑文本过长时的省略策略

    5. 切图至少提供两套,xhdpixxhdpi

    6. 消除布局警告,同时删除控件中的无用属性

    7. 对于只有在某些条件下才展示出来的组件,建议使用viewStub包裹起来,include 某布局如果其根布局和引入他的父布局一致,建议使用merge包裹起来,如果你担心preview效果问题,这里完全没有必要,可以tools:showIn=""属性,这样就可以正常展示preview了。

    8. 欢迎补充。

    参考资料:

    1.Android性能优化之布局优化

    2.Android 高效布局的几点建议

    3.(译)写出高效清晰Layout布局文件的一些技巧

    4.Android 过度绘制优化(推荐阅读)

    5.Android开发之merge结合include优化布局

    6.Android性能优化之渲染篇

    7.如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析

    8.LinearLayout增加divider分割线

    9.Android APP 性能优化的一些思考

    展开全文
  • 除了一些网页兼容性的问题,唯一感觉到不爽的地方就是带下划线的网页字符的显示,下划线和文字底部重合,看起来十分不爽!(IE的下划线和文字底部有一段距离,比较养眼)有下图为证: 用了一段时日实在受不鸟,把...
  • 最近在项目提交后测试部门反馈这样的问题,下拉菜单在过渡效果中出现文字模糊和抖动。调试过程中发现除IE 11和FireFox 54下没有出现该问题,但在Chrome下出现上述问题。
  • 1、先来展示效果: 点击GIRL出现相对应的图片... 重点:这样做的原因: 如果把图片放到网页里,就过于庞大,用户要下载的数据量就相当可观了,没有人去愿意等待下载一个页面吧? 所以要创建javascript图片库。 ...3、jav
  • 模式识别新研究:微软OCR两层优化提升自然场景下的文字识别精度   摘要:OCR识别可分为两步:首先是文本检测,将文字从图片中提取出来;然后对文本进行识别。此次的突破主要是在文本检测环节的两个子阶段:...
  • 之前一直觉得实现在图片上添加文字很厉害,后来机缘巧合之下,我也需要自己去实现这个步骤,所以在下面梳理一下踩过的坑和实现的原理,希望能帮到大家。 从网上搜索JAVA相关生成GIF加文字或者加水印会发现已经有很...
  • MySQL查询优化之四-引擎条件下推优化优化(Engine Condition Pushdown Optimization) 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:12951803 环境: MySQL版本:5.5.15 操作系统:...
  • Android性能优化(4):UI渲染机制以及优化

    千次阅读 多人点赞 2019-11-20 09:38:34
    渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView 在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有...
  • 本文主要讲解性能优化中的绘制优化,希望你们会喜欢。 目录 1. 影响的性能 绘制性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如何影响性能 绘制影响Android性能的实质:页面的绘制...
  • 摘要:OCR识别可分为两步:首先是文本检测,将文字从图片中提取出来;然后对文本进行识别。此次的突破主要是在文本检测环节的两个子阶段:先采用对比极值区域CER检测方法,再采用基于浅层神经网络的文字/非文字分类...
  • 磁盘 I/O性能优化 Tune Disk Performance   Windows磁盘性能优化技巧: 下面的文字从微软的技术资料库中而来: Some disk tuning suggestions from the article - "if your disk sy
  • 多目标优化详解【转载】

    万次阅读 多人点赞 2017-09-02 11:05:47
    多目标优化问题详解 生活中 ,许多问题都是由相互冲突和...优化问题存在的优化目标超过一个并需要同时处理 ,就成为多目标优化问题。 多目标优化问题在工程应用等现实生活中非常普遍并且处于非常重要的地位 ,这些实
  • 这使得更容易依据不同尺寸的屏幕和不同的文本内容优化文字尺寸。 从26.0 Beta版的支持库开始,支持此功能运行在装了Android O之前的系统的设备上。这个库支持Android4.0(API level 14)及更高的
  • Android性能优化—布局优化技巧

    千次阅读 2017-03-21 19:12:08
    安卓 布局优化 提高性能
  • 页面优化

    万次阅读 2014-05-07 10:52:23
    前端优化是复杂的,针对方方面面的资源都有不同的方式。那么,前端优化的目的是什么   1. 从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。 2. 从...
  • SEO优化

    千次阅读 2016-10-21 14:47:00
    页面标题是包含在title标签中的文字,是页面优化最重要的因素 用户访问时,页面标题显示在浏览器窗口最上方。 在搜索的结果页面上,页面标题是结构列表中第一行文字,是用户浏览搜索结果时最先看到的、最醒目的...
  • 多目标优化问题概述

    万次阅读 2017-08-29 20:34:16
    图片不清楚请看多目标问题详解:多...文字描述: D个决策变量参数; N个目标函数; m+n个约束条件。 数学描述:X(小写)为D维决策向量;y为目标向量;N为优化目标总数;gi(x)和hj(x)为条件约束(为已知确定的可行
  • hexo优化

    万次阅读 2019-10-24 20:28:07
    文章统计,文字阅读时长 3步 $ npm install hexo-symbols-count-time --save # Post wordcount display settings 主题配置文件 # Dependencies: https://github.com/theme-next/hexo-symbols-count-time ...
  • SEO优化实录

    万次阅读 2017-07-20 16:09:52
    最近朋友的网站流量一直很小,让我给看看SEO优化的问题,那么本期就来详细谈谈SEO优化的一些问题吧。这篇博客也会在不断更新最新的改动和改动后的效果...图片文字问题 描述和关键字不对应 内容缺乏 出站链接和友情链接S
  • 关于英文谷歌SEO排名优化,一全老师经常收到类似的提问: 谷歌网站SEO是什么意思?做谷歌SEO排名有什么用?英文谷歌网站优化怎么做?谷歌优化应该自己做还是外包给SEO公司?谷歌SEO外包或者培训什么价格合适?某某...
  • SEO 优化策略

    千次阅读 2018-03-12 10:17:23
    第一 图片文字问题 1.图片大小比例121:75; 2.图片alt一定要有,并且和页面主题相关,因为搜索引擎优先抓取图片的alt; 3.在没有alt的情况下,搜索引擎会进行title的抓取; 4.在alt和tit...
  • 个人博客 SEO 优化(2):站内优化

    千次阅读 2018-04-16 22:04:51
    文章首发于我的博客:个人博客 SEO 优化(2):站内优化 对于搜索引擎原理不清楚的可以看第一篇文章:个人博客 SEO 优化(1):搜索引擎原理介绍 ...优化文字分布 网站结构优化简单概括有下面几个...
  • seo优化公式模型 seo优化模型

    千次阅读 2011-05-12 09:46:00
    seo优化模型seo优化模型-seo基础公式模型-seo概括模型概括seo优化公式|seo优化模型|seo公式模型基础-seo优化模型最新的seo优化公式,最新的seo优化模型 公式1:“SEO=∫Clock”公式2:“SEO =∫C1+L2+K3+O4”SEO=...
  • MyEclipse 2015优化技巧

    万次阅读 2015-01-25 13:15:14
    MyEclipse 2015优化技巧作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszsMyEclipse 2015优化速度方案仍然主要有这么几个方面:去除无需加载的模块、取消冗余的配置、去除不必要的检查、关闭更新。第...
  • Hexo博客优化

    千次阅读 多人点赞 2015-02-04 21:57:37
    一、发布文章 在source/_posts目录下存放文章,后缀为md或markdown都可 打开一篇文章,开头需要配置一下...注:以上主要是针对light主题进行优化,其他主题也可参考以上内容。 原文首发: 麦田技术博客 作者: itmyhome
  • HTTP性能极限优化

    千次阅读 多人点赞 2020-01-13 09:38:24
    它是最常用的应用层协议,对它的优化,既能通过降低时延带来更好的体验性,也能通过降低资源消耗带来更高的并发性。 可是,学习HTTP不久的同学,很难全面说出HTTP的所有优化点。这既有可能是你没好好准备过大厂的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 195,815
精华内容 78,326
关键字:

优化文字