精华内容
下载资源
问答
  • 使用如下代码解决屏幕跳动 [UIView performWithoutAnimation:^{ NSIndexSet *reloadSet = [NSIndexSet indexSetWithIndex:1]; [self.workTable reloadSections:reloadSet withRowAnimation:UITableViewRowA...

    屏幕跳动异常

    修正后不再跳动

    使用如下代码解决屏幕跳动

    [UIView performWithoutAnimation:^{
            NSIndexSet *reloadSet = [NSIndexSet indexSetWithIndex:1];
            [self.workTable reloadSections:reloadSet withRowAnimation:UITableViewRowAnimationNone];
    }];
    展开全文
  • 字节跳动屏幕适配方案解读

    千次阅读 2019-01-19 12:57:25
    字节跳动屏幕适配方案 重点 为什么要做屏幕适配 从数据上告诉你安卓手机屏幕的碎片化 我司的适配方案 适配中出现的问题 实际演练 为什么要做屏幕适配 在Android开发中,由于Android的碎片化严重,屏幕分辨率...

    说来惭愧,这个方案在微信公众号推出来的时候,我才去了解我司自己的适配方案。字节跳动屏幕适配方案

    重点

    1. 为什么要做屏幕适配
    2. 从数据上告诉你安卓手机屏幕的碎片化
    3. 我司的适配方案
    4. 适配中出现的问题
    5. 实际演练

    为什么要做屏幕适配

    在Android开发中,由于Android的碎片化严重,屏幕分辨率千奇百怪,想要在各种分辨率的设备上显示一致的效果,适配成本越来越高。虽然Android官方提供了dp单位来适配,但是在各种奇怪分辨率的手机下表现的不近人意。

    Android手机屏幕的碎片化

    在大部分场景下我们是不需要关心屏幕适配,因为很多ui不会有太多元素,要不然就是RecyclerView来展示数据,但是也有不少的场景UI会比较复杂,我们需要关心手机适配,接下来,从Google和友盟的数据上看下当前手机屏幕的大小和分辨率

    Google数据

    可以看到Normal占比是最多的,Normal就是宽度为480dp的手机。而在Normal手机中dpi为320的手机又居多。

    small -> 320dp
    Normal -> 480dp
    Large -> 600dp
    XLarge -> 720dp

    友盟数据


    名次 屏幕分辨率 活跃占比 趋势
    1 1920x1080 (16:9) 28.9
    2 1280x720 (16:9) 22.5
    3 1080x1821 (3:5) 3.9
    4 960x540 (16:9) 3.3
    5 854x480 (16:9) 2.8
    6 720x1208 (9:16) 2.6
    7 1184x720 (5:3) 2.4
    8 1776x1080 (5:3) 2.1
    9 2560x1440 (16:9) 2
    10 2016x1080 (17:9) 1.9
    11 1794x1080 (5:3) 1.8
    12 2040x1080 (17:9) 1.3
    13 2160x1080 (18:9) 1.3

    从上面的数据可以看到安卓的手机市场,各种比例、分辨率、尺寸的手机层出不穷,如果我们按照Google官方的适配方案,那么我们基本上可以不用做其他需求了,ui改动一个像素点,你可能需要改动十几个layout的布局文件。

    字节跳动屏幕适配方案

    这节会从基础到新的适配方案,详细看下同事是怎样解决这个世纪难题。

    传统dp适配方式

    android中的dp在渲染前会将dp转换为px,计算公式为

    px = density * dp 
    
    
    density = dpi/160 
    
    
    px = dp * (dpi/160)
    

    dpi(pot per inch)就是每英寸的多少个点,dpi是根据屏幕真实的分辨率和尺寸计算的,每个设配可能都不一样。

    拿MIX2做个例子,MIX2的尺寸是5.99英寸,分辨率是2160*1080象素。根据上面的公式可以算出MIX2的dpi为402。

    这里有个小问题
    我们通过代码

    val mix2dpi= resources.displayMetrics.densityDpi
    println("mix2 dpi is : $mix2dpi")
    
    //打印出 440
    

    为什么和我们计算出来的不一致,难道公式是假的?那肯定不是的,小米手机虽然在手机信息上写的5.99英寸但是这是整个手机屏幕,而不是真正的显示区域,MIX2的真正显示区域是5.5英寸,这样是不是就对应起来了。

    这样问题就来了

    假设我们的设计小哥哥给的UI设计图是按照屏幕375dp设计的,那么在上述的设备上,屏幕的宽度是1080/(440/160)=392.7dp,也就是要比设计图要款。这种情况下,即时使用dp,也无法达到和设计图相同的效果。同事还存在部分设备宽度不足375dp,那么就会出现超出屏幕的情况出现。

    除此之外还有很多设备并没有按照上述的公式来实现,因此dpi的值是非常乱的。用dp进行适配也是差强人意。

    字节跳动适配方案

    先了解几个知识点

    • dp和px的转换公式为:px = dp * density
    • dp转换的场景都是通过DisplayMetrics来进行计算的
    • DisplayMetrics#density 就是上述的density
    • DisplayMetrics#densityDpi 就是上述的dpi
    • DisPlayMetrics#scaledDensity 字体的缩放因子,正常情况下和density相等,但是调节系统字体大小后会改变这个值

    那么应用中所有dp的计算都是更DisplayMetrics这个类有关,所以只用针对这个类进行操作就好了。

    我们可以将DisPlayMetrics理解为三个部分

    1. System,初始分配,包含第三方库。
    2. Application,整个应用的DisplayMetrics
    3. Activity,单个Activity页面的DisplayMetrics
            //系统的屏幕尺寸
            val systemDM = Resources.getSystem().displayMetrics
            //app整体的屏幕尺寸
            val appDM = activity.application.resources.displayMetrics
            //activity的屏幕尺寸
            val activityDM = activity.resources.displayMetrics
    

    我们这里以宽度为375dp的宽度为基准去适配,这个值你可以改为任何值。

            // 适配屏幕的宽度
            activityDM.density = activityDM.widthPixels / tartgetDP.toFloat()
            // 适配相应比例的字体大小
            activityDM.scaledDensity = activityDM.density * (systemDM.scaledDensity / systemDM.density)
            // 适配dpi
            activityDM.densityDpi = (160 * activityDM.density).toInt()
    

    看下整个适配的工具类,特别简单

    object ScreenUtil {
    
        fun adapterScreen(activity: Activity, targetDP: Int, isVertical: Boolean) {
            //系统的屏幕尺寸
            val systemDM = Resources.getSystem().displayMetrics
            //app整体的屏幕尺寸
            val appDM = activity.application.resources.displayMetrics
            //activity的屏幕尺寸
            val activityDM = activity.resources.displayMetrics
    
            if (isVertical) {
                // 适配屏幕的高度
                activityDM.density = activityDM.heightPixels / targetDP.toFloat()
            } else {
                // 适配屏幕的宽度
                activityDM.density = activityDM.widthPixels / targetDP.toFloat()
            }
            // 适配相应比例的字体大小
            activityDM.scaledDensity = activityDM.density * (systemDM.scaledDensity / systemDM.density)
            // 适配dpi
            activityDM.densityDpi = (160 * activityDM.density).toInt()
        }
    
        fun resetScreen(activity: Activity) {
            //系统的屏幕尺寸
            val systemDM = Resources.getSystem().displayMetrics
            //app整体的屏幕尺寸
            val appDM = activity.application.resources.displayMetrics
            //activity的屏幕尺寸
            val activityDM = activity.resources.displayMetrics
    
            activityDM.density = systemDM.density
            activityDM.scaledDensity = systemDM.scaledDensity
            activityDM.densityDpi = systemDM.densityDpi
    
            appDM.density = systemDM.density
            appDM.scaledDensity = systemDM.scaledDensity
            appDM.densityDpi = systemDM.densityDpi
        }
    }
    

    使用中出现的问题

    使用时需要注意以下几点:

    1. 尽量只在当前页面生效,包括activity,fragment,dialog,view,需要在setCOntentView()或者inflate之前调用这个方法,在结束onDestroy,onDismiss,onDetachWindow()的时候调用resetScreen()方法。
    2. 在页面中需要弹出toastdialog的时候需要调用resetScreen,不然toastdialog的页面大小和字体大小会被影响。
    3. 记住一点使用前调用adapterScreen,时候后调用resetScreen

    实际操作

    工欲善其事必先利其器

    我们要使用这种方式,首先要把Android Studio的xml预览界面调节成设计师给的设计图的屏幕尺寸。这里已经向抖音的设计师确认,给我们的所有设计图都是按照750*1334象素 -> 375*667dp的规格设计。也就是说density=2,对应dpi=160*2=320,对应的手机屏幕大小为4.8英寸

    在预览界面怎么创建相应的界面呢?

    tools -> AVD Manager -> Create Virtual Device… -> New Hardware Profile -> screen sieze: 4.8 Resolution: 750 x 1334

    什么?还不会,那我只能把所有的图都贴出来了。


    现在准备完成了,可以开始开发了

    比对效果

    未使用前,为了适配小屏手机,在大屏手机上看就会很丑

    使用后,两个页面基本相同了

    展开全文
  • 摇动模式 摇动主屏幕图标,然后将“编辑主屏幕”替换为“摇动模式”
  • 前言 Android开发前几年火爆一时,市场饱和后Android程序员每一名程序员都想成为架构师,但这期间,需要付出的辛苦和努力远超过我们的想象。 我对Android工程师的调研发现:97% 的Android开发 技术人都会面临这些...

    前言

    Android开发前几年火爆一时,市场饱和后Android程序员每一名程序员都想成为架构师,但这期间,需要付出的辛苦和努力远超过我们的想象。

    我对Android工程师的调研发现:97% 的Android开发 技术人都会面临这些困境(可能也是你的困惑)

    40个改变编程技能的小技巧

    1、将大块代码分解成小函数

    2、今日事今日毕,如果没毕,就留到明天。

    如果下班之前还没有解决的问题,那么你需要做的,就是关闭电脑,把它留到明天。
    中途不要再想着问题了!

    3、YAGNI原则

    「You aren’t gonna need it!」
    你自以为有用的功能,实际上是用不到的。除了要求的核心功能,其他功能一概不要部署。
    这一原则的核心思想是,尽可能快、尽可能简单的将软件运行起来。

    4、不必全知全能,但基础一定要扎实

    比如学习一些基础知识,SOLID原则,如何写干净的代码等等。

    5、KISS原则

    「Keep it simple,stupid.」or「Keep it stupid simple.」,一种程序设计原则。
    大多数系统往往「最简单」,运行效率最高,但实际操作起来并不简单。

    6、别想太多

    7、被问题/Bug卡住时,walk away!

    不过还是要记得回来。

    当你走在去上班、去厕所、去散步的时候,也许就能想到解决方法。
    尤其是在与客户、同事生气时,甚至关乎你工作去留的时候,效率会更高。

    8、学会写测试代码TDD

    TDD是一个软件开发过程,它依赖于重复一个很短的开发周期:写一个测试,运行所有的测试,看看新的测试是否失败,写一些代码,运行测试,重构代码,重复。

    9、先分解问题再开始写代码

    不要不知道怎么做就开始写代码。

    10、代码不要死记硬背

    要理解逻辑。

    11、学好用好Stack Overflow

    如果你复制粘贴一个Stack Overflow解决方案,请一定要确保已经理解了它。

    12、不要「光学不练」

    如果你想学点什么,就去练习,光学是不够的。

    13、与小伙伴互相审查代码

    研究别人的代码,让别人时常研究你的代码。
    互帮互助,共同进步。

    14、Don’t Reinvent The Wheel

    「不要重新发明轮子。」
    充分利用已有的经验和成果,避免不必要的投入和浪费。

    15、你的代码是最好的文档

    16、懂得如何搜索

    对于这一点,你需要有经验以及读很多书,才知道要找什么东西。

    17、写代码时要之后维护考虑

    你的代码将来需要你自己或者别人来维护。
    所以,写代码的时候要考虑到读者,而不是想成为最聪明的人,让它读起来就像在读一个故事。

    18、复制粘贴

    用谷歌、百度解决错误的最好方式就是「复制粘贴」。

    19、不要放弃

    到最后,不管用什么方式,问题肯定会解决。

    20、休息、休息再休息

    解决问题的最好方法是有一个安稳的心态。

    21、学习软件设计模式

    设计模式是软件设计中常见问题的解决方案。每一种模式就像一个蓝图,你可以自定义来解决代码中常见的设计问题。(不要重复发明轮子。)

    22、使用集成工具

    尽可能实现自动化。

    23、Do code katas.

    「Code kata」是编程中的一种练习,可以帮助程序员通过练习和重复来提高他们的技能。

    24、依赖注入是一个要求

    编程到一个接口,而不是implementation。
    所谓依赖注入,就是组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。

    25、重构-测试-重构

    重构是一种对现有代码进行重组的技术,在不改变其外部行为的前提下,改变和改进其内部结构。

    26、及时寻求帮助

    不要浪费时间。

    27、Practice makes perfect.

    业精于勤。

    28、不必太在意评论

    虽然有时评论可以帮到你,但不要太过在意。他们可能已经过时了。

    29、了解你的开发环境

    了解你的开发环境,并invest一个足够强大的环境,如,IntelliJ。

    30、复用组件

    31、考虑相关限制

    在开发网络应用时,要考虑到移动优先以及相关的功率和带宽限制。

    32、不要过早优化或重构

    更重要的是尽快拥有一个最低限度可行的产品。

    33、不要投机取巧

    千万不要为了节省几分钟的时间而选择效率低下的捷径方式。
    「Every time you code, give your best!」

    34、遵循规定的标准

    35、用户不是技术人员

    当你开发你的UI时,需要考虑到这一点。

    36、坚持使用Github或bitbucket

    可以进行小规模、频繁的git提交。

    37、记录所有关键部分

    记录系统日志比调试代码更好。

    38、风格保持一致

    如果你使用一种风格,请总是使用相同的风格。
    如果你和更多的人一起工作,对所有的团队都使用相同的风格。

    39、Don’t stop learning

    但比起学习新语言或框架,更要注重学习软件开发的基础知识。

    40、patience and love

    最后,对你正在做的事情保有足够的耐心和热爱。

    结尾

    好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

    这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

    E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

    [外链图片转存中…(img-18V9VFpD-1614683766504)]

    展开全文
  • 如何录制屏幕?通过录制屏幕我们可以记录生活中的精彩,通过录制屏幕我们可以给紧张的工作增添乐趣。工作生活中有很多地方要录制屏幕,那么我们如何录制屏幕呢?下面小编给大家介绍三种方法,让你轻松搞定录制屏幕。...

    如何录制屏幕?通过录制屏幕我们可以记录生活中的精彩,通过录制屏幕我们可以给紧张的工作增添乐趣。工作生活中有很多地方要录制屏幕,那么我们如何录制屏幕呢?下面小编给大家介绍三种方法,让你轻松搞定录制屏幕。

    (图:如何录制屏幕)

    方法一:采集卡采集

    视频采集卡(Video Capture card)也叫视频卡,用以将模拟摄像机、录像机、LD视盘机、电视机输出的视频信号等输出的视频数据或者视频和音频的混合数据输入电脑,并转换成电脑可辨别的数字数据,存储在电脑中,成为可编辑处理的视频数据文件。

    (图:视频采集卡)

    录制屏幕方法:

    通过电脑建立一个模拟的采集环境,并在电脑上安装视频采集卡和相关驱动。安装完成,进行一定的参数设置(包括:视频参数、帧率等)。设置完成,点击【开始采集】,采集完成,视频即保存在对应的目录。

    方法二:企鹅直播助手

    企鹅直播伴侣是腾讯官方发布的直播辅助软件,它不仅支持直播功能,还提供了直播视频录制功能,方便用户在观看直播时录制一些精彩操作。

    (图:企鹅直播助手)

    录制屏幕方法:

    首先下载企鹅直播伴侣软件安装,在主界面中,点击界面下方的【窗口截取】按钮,然后选择录制模式【全屏录制或截屏录制】,点击开始录制,最后录制完成,视频即保存在对应的目录。

    方法三:嗨格式录屏大师

    嗨格式录屏大师是一款专业的录制屏幕软件,软件支持全屏录制、区域录制,摄像头录制等录制模式。除了录制屏幕外,嗨格式录屏大师还可以录制游戏、教学、聊天、热播电视剧、加密等各类视频。录制问答,简单易用,适合电脑小白使用。

    (图:嗨格式录屏大师)

    录制屏幕方法:

    首先下载嗨格式录屏大师(官网地址:http://www.higeshi.com/lupingdashi)安装,在主界面中,选择录制模式,一般录制屏幕我们选择“全屏录制”。进行参数设置,包括“视频格式、清晰度、声音、鼠标指针、快捷键、保存目录等”。设置完成后,点击“开始录制”按钮。录制过程中需要暂停,点击“暂停录制”按钮。录制完成,点击“停止录制”按钮,即可一键保存视频。

    其实录制屏幕还是挺简单的,如果您有录制屏幕的需求,可以选择上面三种方法逐一尝试。好了,今天的内容就到这里,如有帮助欢迎收藏转载哦!

    展开全文
  • 免费屏幕录制软件有哪些?对于一些使用电脑进行办公的小伙伴来说,能够有一款免费屏幕录制软件实在是太重要了。但众所周知的是,目前这种类型的软件几乎是没有的,即使有也只能进行几分钟的免费录制。所以这里小编为...
  • Java相关 无论什么级别的Android从业者,Java作为Android开发基础语言。不管是工作还是面试中,Java都是必考题。如果不懂Java的话,薪酬会非常吃亏(美团尤为重视Java基础) 详细介绍了Java泛型、注解、并发编程、...
  • 前言 最近看到很多人都在找工作, 而且很多人都感觉今年找工作比去年难很多, 竞争力也增加不少, 因此激发我整理这份资料, 希望能帮到正在找或者准备找工作的童鞋们. 首先我们能否获得一个面试机会, 那肯定是从简历...
  • 原标题:屏幕录制工具分享,便捷录屏就用它前段时间,一直都有一个网友追着问小北,说哪款屏幕录制软件工具最好,小北虽然被问得有些无奈,却一直都没有回应这个问题。为啥呢?因为现如今网上可以找到的录屏工具真的...
  • 说白了,哪一个行业不是吃青春饭呢?无论哪个行业,大部分的从业人员都是在拿青春赌明天。 而且很残忍的一个事实是,没有人的工作是不可取代的,如果你辞职,老板极力挽留,那就说明,你是那帮取代你的候选人当中最...
  • dpi:屏幕像素密度,指的是在系统软件上指定的单位尺寸的像素数量,它往往是写在系统出厂配置文件的一个固定值; ppi:也是屏幕像素密度,但这个是物理上的概念,它是客观存在的不会改变。dpi是软件参考了物理像素...
  • 前言 阿里巴巴,作为国内互联网公司的Top,算是业界的标杆,有阿里背景的程序员,也更具有权威性。作为程序员,都清楚阿里对于员工要求有多高,技术人员掌握的技术水平更是望尘莫及。所以,大厂程序员的很多经验也都...
  • 最近很多人说,Android越来越不好找工作了,学习NDK开发会不会好点,今天就聊聊这个问题。是否应该选择学NDK? 1.哪些场景下要用到NDK开发? 跨平台的库,如FFmpeg, skip,weex, 加固,防逆向 ...
  • 作为系统级服务单独运行在一个进程 SurfaceFlinger:将 WMS 维护的窗口按一定次序混合后显示到屏幕上 View 动画、帧动画及属性动画 View 动画: 作用对象是 View,可用 xml 定义,建议 xml 实现比较易读 支持四种...
  • 简单介绍下背景 笔者双非末流渣渣一本毕业,工作已有6年多。年前从一家小公司CTO离职。准备年后“金三银四”换个更大的舞台。 疫情爆发,市场经济遭到沉重打击,大批企业裁员,整个三月都居家隔离。...
  • <div><p>真机调试,WechatShortVideoController在dismiss的时候,屏幕顶部部分被渲染成红色且视图有较大的跳动</p><p>该提问来源于开源项目:AliThink/WechatShortVideo</p></div>
  • 背景 首先我是个菜鸡,工资也低的一笔。 刚毕业时候在一家国企上班干 app 开发,干了快两年的时候,跳槽到了一家伪大厂干安全。投了不少简历都没有回音,只有这加伪大厂要我就来了。当时说好了会接触一些底层的东西...
  • 《p5.js创意游戏编程》第一课:跳动的小球准备:Hbuilder/vscode等可以编写网页的编辑器如果想立刻上手也可以使用在线编译器p5.js官方在线编辑器,如果打不开也可以使用国内的一款在线编辑器jsrun编辑器,(第一课先...
  • 前言 之前我有个学弟,应届毕业生,秋招拿了一些 offer,这几天非常纠结。 offer 要考虑的因素太多了,盲目地搜索了几天,网上各种各样的声音都有,收获不多。为此咨询我一下,面对这种情况应该如何选择,我相信这个...
  • 最近有好多大学生和我来说想入门Android,所以写下这篇文章来给大家一个意见。...旋转屏幕的时候会发生什么? Java的常量池?不同String赋值方法,引用是否相等? HashMap的实现?树化阈值?负载因子?增长系.
  • 开头 都说程序员是在吃青春饭,这一点的确有一点对的成分,以前我不这么认为,但随着年龄的增长,事实告诉我的确是这样的,过了30以后,就会发现身体各方面指标下降,体力和身心上都多少有点跟不上了,这个年龄往往...
  • 上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 427
精华内容 170
关键字:

屏幕跳动