查看详情

Android 自定义滚动条

做前端肯定离不开设计师要求自定义滚动条内容,相对于 iOS / Web ,Android 相对比较容易控制,我们可以非常方便的改变 View 或者 WebView 的样式。Android 提供了两个 xml 属性 android:scrollbarThumbVertical android:scrollbarTrackVertical 他们分别表示我们需要改变滚动条的拖拽部分和底部轨道的样式。 如下图 比较常规的设计,我们实现一个带圆角的矩形,我们在 drawable 目录下新建两个文件 custom_scrollbar_thumbnail.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > 详情 »

查看详情

修复 Android Studio Error while executing: am start -n 启动失败

大概这种问题只会突然出现,就是在真机调试突然报这样的错误 Error while executing: am start -n "com.xxx/com.xx.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=pagekageName/.ac.WelcomeActivity } Error type 3 Error: Activity class {com.xxx/com.xx.MainActivity} does not exist. Error 详情 »

查看详情

六月天

刚迈入六月份,虽然夏天的风吹起来了,就是还是大了点。 创业 还是愿意在月记里穿插些关于创业的体会。最近 SpaceX 载人飞船的事情,朋友圈刷屏了。大概很多人是觉得,新的领域需要特别坚持的人才。任何事情,收益会在坚持里不断增长,虽然 90 后跳槽很频繁,虽然跳槽会有超出预期的收益,但是长期收益不一定很好。一万小时理论,在任何行业或者某些事情一定是成立的。创业中后期,需要热情,也需要科学化的管理策略,我也特别赞同,并不是所有人都适合创业,它对 人心的磨砺,远超所谓技能或者某些方面的知识的要求高多了。创业一定是一件自我怀疑的事情。如果你特别看好领域,坚持投入,一定有回报的,保持耐心。 可奈 五月底和狼叔吃了顿饭。得知远去杭州淘宝,大概我也觉得这是菜爷走后,整个大前端团队的的尾声。记得17年五月份也是这个时候,那个时候还在忙军师联盟的事情,第一次写关于 YK 的一些看法: 最近在YK那边,其实圈子氛围挺好的,既然我们过去就肯定是希望带来一些 change的,改变或多或少是痛苦,但是谁 TM 叫 A 买了。自己买的东西总不能让它自由生长吧,自己不方便谈论战略性的问题,但是未来会证明, 详情 »

[Netflix Diary]2020-05-27

今天第一件事情就是停掉了阿里云那个轻应用服务器。感觉又是活动想薅羊毛结果自己赔本的事情,什么东西都没弄然后就过期了。 晚上和狼叔吃了一顿饭。他远去杭州淘宝做前端智能化。自己把 niou 的介入化为大优酷前端的转折点,菜爷离开北京,把团队留给  niou ,然后开始了优酷第二代前端的组建工作。现在看看一代这些前端离去,真的是各种滋味在心头。总的来说大文娱的发展已经看到在三家中开始显现颓势了。晚上回去已是十点半,看了下 kotlin 的课程,发现也还是帮助不少。 详情 »

【Netflix Diary】2017-05-26

今天开始想 Netflix 面试的事情。其实这个说句实话我自己都觉得没谱。但是最近看 30 岁的视频,总觉得这一辈子少有为了一件事情特别努力的情况。最近看了一些翻墙去谷歌和FB 的比比皆是。当然也不是没什么机会。 我觉得 Netflix 面试需要准备三个方面的东西。 算法 英语 基础知识 大概也是从今天开始制定了每周的一个计划和日程,目标是十月份准备第一次 interview 挑战 , 其实这个年龄还想着,但是自己总觉得还是应该为梦拼一次。上一次连载日记还是创业的时候,自己一直想的是人还是应该多少为一些事情努力到无悔。 大概必须得每天腾出时间学习和记忆。一直觉得记忆很重要,需要记住很多东西才有效。 今天开始,你值得努力。 详情 »

查看详情

Swift 和 Kotlin 获取代码执行行数和文件名

如果我们需要需要实现一个类似打印当前函数调用的文件名和函数的化,我们需要借助一些类库。 在 swift 中我们可以借助 #file 和 #line 来实现数据获取/。 类似 public static func log(file: String = #file, line: Int = #line) { } 而在 Android 我们需要借助 Thread 来实现 var str = "" try { val filename = Thread.currentThread().stackTrace[your_trace_index].fileName val line = Thread.currentThread().stackTrace[your_trace_index].lineNumber str = " $filename [l$line]" } catch (err: 详情 »

查看详情

VR 中 Monoscopic 和 Stereoscopic 的区别

无论是 VR 拍摄还是 VR 开发中,我们都会遇到这个问题,关于Mono(monoscopic) 和 Stereo(stereoscopic) 的选择。这里简单给大家科普下 在 AR/VR 显示技术原理 (上) 中,曾经涉及到,双眼和单眼成像的区别。而 Monoscopic 和 Stereoscopic 的区别就和这个相关。 Monoscopic (简称 mono) 实际上来源一个镜头的采集,通过本身角度的变化,类似于从0-360 这样来进行连续采集,而这样的图片在还原的时候,有个特点,就是周围距离自己的距离是一致的,比如最近自如VR 的单摄像头拍摄就是这个原理。 Stereoscopic(简称 stereo ) 实际上是双摄像头进行采集。我们知道人体双眼对距离的感知是很明显,所以这种方式采集对物体的距离感非常明显,这也是专业 VR 摄像所采用的设备。比如 Insta360 Pro2 我们可以看到它的镜头分布。 而它由于是多摄像头拍摄,因此平面视频会是不同的风格, 由于这是模拟人眼的方式,因此人类在感知还原的时候对于深度和距离非常准确,VR 详情 »

查看详情

Swift 使用 Observe 监测页面滚动

Swift 以前是通过 addObserver 来实现对某个属性的变化监听,而最新的变化,书写起开更加方便。 observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in print(change) } 一定要用属性赋值当前的 observe 结果,没有的话可能会造成 change 不生效。 对 UIScrollView 的滚动监听,我们可以使用 UIScrollViewDelegate extension UIScrollViewDelegate{ func scrollViewDidScroll(scrollView: UIScrollView){ //do something } } 这里推荐使用 Observe 比较方便的是可以进行模块的逻辑的拆分,我们只需在自己的组件里面进行监听 class ComponetView: UIVIew { private var observation: NSKeyValueObservation? init(targetView: UIView) { observation = targetView.observe(\.contentOffset, options: 详情 »

查看详情

gerrit 保持 commit id

最近接触到了 gerrit ,主要方便大家进行代码 Review; 当然大家可能会遇到 review 发出去后,发现还有一些需要更改的,又需要重新提交一些。为了保持同一个 commit id ,你可以使用 # 回撤 git reset --soft HEAD~1 git add . git commit -m 'paste your commit content' 你只需要把网页里面的 commit 内容粘贴进去就好,这样发就回指向到同一个 review url 地址了。 详情 »

查看详情

iOS WebView 对 H5 视频播放的控制

各大厂商在媒体播放这块一般管控都比较严格,所以经常会出现一些非常规的行为,比如 iOS 唤出全屏,比如自动播放,比如画中画(PiP) 无法唤起等问题。 在 iOS 中,我们各个 App 引入的 Webview 容器都是官方推荐的 WKWebView ,我们需要它来加载我们的网页,从而完成部分功能。但是处于安全隐私的考虑,它默认的一些属性是并不开启的。其中我们比较关注的视频播放有这么几项: applicationNameForUserAgent 用于设置 WebView user agent allowsInlineMediaPlayback 是使用h5的视频播放器在线播放, 还是使用原生播放器全屏播放 mediaTypesRequiringUserActionForPlayback 允许哪些媒体格式需要用户手动触发播放 allowsAirPlayForMediaPlayback 是否允许 Apple 的 Airplay allowsPictureInPictureMediaPlayback 是否允许 画中画模式(PiP) 在 Swift 中,我们可以简单的初始化一个 webview struct WebView: UIViewRepresentable { let request: URLRequest var config = WKWebViewConfiguration( 详情 »