- 博客(297)
- 资源 (8)
- 收藏
- 关注
原创 SwiftUI-布局-ForEach
注意点:添加 id需要索引的使用count直接对数据循环private struct NamedFont: Identifiable { let name: String let font: Font var id: String { name }}private let namedFonts: [NamedFont] = [ NamedFont(name: "Large Title", font: .largeTitle), NamedFont(n
2021-08-18 09:37:38
722
原创 SwiftUI-JSON序列化、反序列化
Swift5 自带解析extension Encodable{ func toJson() -> String { return String(data: try! JSONEncoder().encode(self), encoding: .utf8) ?? "" }}extension String{ func toModel<T:Decodable>() -> T? { do{ return
2021-08-18 09:35:59
696
原创 SwiftUI-各种布局示例
布局分类紧凑型:默认使用自身大小TextVZstack HStack ZStack贪婪型:默认填充父容器大小CircleGeometryReader 读取上层容器大小紧凑转贪婪.frame(maxWidth:.infinity, maxHeight:.infinity)贪婪转紧凑.frame(width:100, height:100)布局大小.frame().frame()布局位置offsetposition布局大小layoutPriorityGeometryRead
2021-08-18 09:33:33
698
原创 SwiftUI-资源
学习目录&创建工程import SwiftUIstruct ContentView: View { var body: some View { Text("Hello, World!") .padding() }官网地址苹果开发者主页SwiftUI主页官方教程示例SwiftUI文档索引下载 Xcode官方地址创建工程创建工程 - iOSApp - SwiftUI目录结构├── Demo│ ├── Assets
2021-08-18 09:29:07
265
原创 SwiftUI-布局-应用Tabbar
应用底部 Tabbar, 点击切换 tab。NavigationView { TabView { NavigationLink(destination: HomeView()) { Text("进入") } .tabItem { Image(systemName: "square.fill") Text("主页") } Text("发现界面")
2021-08-18 09:27:17
622
原创 学习 Compose 系列(一)环境配置、概念理解、初体验
Jetpack Compose 是用于构建原生界面的新款 Android 工具包。它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。Compose 作为一条新的构建界面的工具,不同于原来解析 xml 生成,应用开发方式也与原来不同,需要重新理解其原理。Compose 放在 Jetpack 中,和 ViewModel LiveData 结合,目标是开发更高效,应用更健壮。官网地址之前通过 kotlin + xml 编写UI界.
2021-06-11 22:12:47
459
1
原创 WebView 实现 NestedScrollingChild
承接上文 NestedScrollingParent 实现复杂交互效果 ,在 NestedScroll 这一套流程中,NestedScrollingChild 不用考虑怎么去通知父布局如何滚动,只需要负责自己的事情:产生滚动事件,并将事件共享出去,产生 fling 事件,共享 fling 。NestedScrollingParent 简称 NP NestedScrollingChild 简称 NC
2016-09-02 10:12:08
3377
原创 NestedScrollingParent 实现复杂交互效果
最终效果:1. 接口NestedScrollingParent 用来配置子视图( NestedScrollingChild )嵌套滚动。NestedScrollingParent 简称 NP NestedScrollingChild 简称 NCNC 产生一个 touch 事件,调用 startNestedScroll,表示开始分享出去 touch 事件, NP 的 onStartNestedSc
2016-09-02 10:11:02
3192
原创 写一个福利 Telegram 机器人
官网创建 bot根据文档,在 telegram 里面添加 @BotFather, 然后跟他聊天来创建机器人拿到 token测试在浏览器中(翻墙)输入 https://api.telegram.org/botYOU_TOKEN/getMe 测试: 返回如下格式,说明成功。{ "ok": true, "result": { "id": 249208551,
2016-08-04 10:07:19
76779
6
原创 写一个 ButterKnife
ButterKnife 很多人都用过,能节省很多代码,最多的就是省去了很多 findViewById 语句。接下来自己写一个,就叫 BBKnife 吧。分析在使用 ButterKnife 时,需要书写下面的类似代码,以一个 Activity 为例ExampleActivity.javaclass ExampleActivity extends Activity { @BindView(R.id.
2016-07-31 23:46:39
1028
原创 多行 EditText 的光标高度问题
问题改变文本的行间距需要给 EditText 设置 lineSpacingExtra 和 lineSpacingMultiplier 这个时候的 EditText的光标高度就会变得很难看.解决办法自定义 cursorDrawable 然后设置 padding 值原理EditText 在更新光标的视图的时候检查了光标 drawable 的 padding. 计算光标高度会算上相应的值.相关源码:Edi
2016-07-25 00:24:57
3034
原创 自动化测试还可以用来干啥
自动化测试就是把一些重复的测试工作利用相关工具自动化,减少重复的劳动。我们不仅可以利用自动化测试工具做测试,还可以利用这些工作做一些其他事情,比如爬数据,曾经抓取过学校的整个学期的课表,空闲教室,帮老爸抓取他的客户联系信息到 excel 表。这种工具不同于一般的脚本爬虫,这相当于正常的用户行为,比如点击输入框,输入文本,点击按钮,而且不用担心动态 js 等问题。大概搜索了几个自动化测试的工具: s
2016-07-22 22:09:45
1220
原创 TextView 设置行高并垂直居中
需求: TextView 多行文本可以设置行高(如20dp),每行文本垂直居中。效果如下:实现思路:通过设置 TextView 的 lineSpacingExtra 和 lineSpacingMultiplier 来实现。lineSpacingMultiplier 的值为行间距的倍数,默认值为 1.0f。lineSpacingExtra 值为具体的行间距值,如20dp。垂直居中靠设置 padd
2016-07-22 22:05:55
11428
原创 学习 Promise (结合 Rxjava)
当前的问题在开发过程中不同的语言都有遇到 callback hell(回调地狱), 回调一般出现在异步操作中。 简单的例子: ① 从网络获取图片 ② 将图片进行压缩 ③ 压缩后的数据保存到本地 以上几个操作都属于异步操作,op1(callback(){ success(){ op2(callback(){ success(){
2016-06-26 16:27:41
2612
原创 利用 Android 手机打造来电通知计划
最近住的地方总在晚上停电,还让不让人活了,大热天的,于是就晚上在外面先找个凉快的地方呆着,但是来电的时间不确定,有时候感觉应该来电了,回去了还是没电,那个热啊。那么问题来了,要是屋里来电了有人告诉我就好了!于是计划写一个小程序让它在屋里来电后通知。 利用现用资源:一台退休的手机 大概思路是这样的:家里的路由器是一直连着电源的,老手机是一直开着 wifi 的,来电后路由器通电,自动连接上网络,
2016-06-22 00:11:51
1132
原创 Android 中获取当前的 Activity
需求:获取当前的 Activity 对象,Activity 是系统创建的,一种方法:在 onCreate 的时候拿到引用,这样就得修改 onCreate 方法,还得维护一个数组去管理 Activity 的引用。第二种方法:通过反射拿到 ActivityThread 中的 mActivities 属性,进而拿到当前的 activity 对象( paused 为 false 的activity)。pub
2016-06-18 19:42:51
3933
1
原创 SwipeRefreshLayout 源码
简介官方文档SwipeRefreshLayout 是一个下拉刷新控件,几乎可以包裹一个任何可以滚动的内容(ListView GridView ScrollView RecyclerView),可以自动识别垂直滚动手势。使用起来非常方便。 1.将需要下拉刷新的空间包裹起来<android.support.v4.widget.SwipeRefreshLayout android:lay
2016-06-18 19:41:25
5624
原创 前端+移动开发
第一阶段前端基本功 HTML+CSS JavaScript基础 JS基本特效 JavaScript高级特性 jQuery基本使用 HTML进阶 JavaScript基础教程 常见特效,例如:tab,导航,整页滚动 正则表达式 选择器 CSS进阶 JavaScript内置对象常用方法 轮播图,用JS制作幻灯片 排序算法,递归算法 DOM操作
2016-05-15 20:18:53
1828
原创 Framework分析-点击Launcher中的图标启动Activity
Launcher也是一个应用,点击一个图标,开启一个新的应用。分析从点击图标到新的应用的Activity执行onCreate的执行流程.注意学习Binder机制 无论是通过Launcher来启动Activity,还是通过Activity内部调用startActivity接口来启动新的Activity,都通过Binder进程间通信进入到ActivityManagerService进程中,并且调
2016-02-29 22:55:06
1470
原创 Framework分析-Application的onCreate
ActivityThread并不是一个Thread,而是一个单纯的Java类,查看一下 ActivityThread 的源码final class ActivityThread,并没有继承Thread或者实现Runnable接口,ActivityThread 其中包含 main 方法,程序的入口地方,怎么看出来的呢? 我们开发过程中总会出现程序异常信息,细心看一下log,查看最下面的几行,最终问题出
2016-02-29 22:48:07
1253
原创 Kotlin + RxJava = Functional Powerhouse
原文链接 : Kotlin + RxJava = Functional Powerhouse 原文作者 : Thomas Nield 译文出自 : Hanks.xyz 译者 : hanks-zyh作为一个软件开发人员,我总是寻找方法来达到更少的代码做更多的事情。如果我只要修改一点代码就可以不断适应业务需求变化那就更好了,所以我必须把代码重写。Java语言一直是我的首选,因为它实用
2016-02-29 22:47:03
2102
原创 Ubuntu 14.04 搭建Swift3.0 开发环境
Swift已经出了3.0,开发文档有linux环境的,简单玩一下下载下载压缩包:https://swift.org/download/选择自己的环境,下载对应的压缩包,我这里下载 swift-DEVELOPMENT-SNAPSHOT-2016-02-25-a-ubuntu14.04.tar.gz 到~/Download/Swift 目录下 解压缩$ cd ~/Download/swift# 解压
2016-02-29 22:45:32
2494
原创 Android 热修复总结
前段时间热修复这个词非常火,当时只是大体看了一下,今天抽空好好看了一下具体原理. 什么是热修复?简单的说就是用户不用重新下载一个新的apk安装,而是直接下载一个补丁包,通过补丁来替换一些出现bug的类, 当然下载补丁的过程用户一般是感觉不到的,表面上看是直接修复了bug.原理类似与插件开发,关于插件开发原理,看这篇Android插件原理剖析,其中介绍了一下java中的类加载器和android中的类
2016-01-25 01:05:05
1741
原创 React-Native 鬼畜表情包app
QQ群,微信群,各种大神,各种表情,每到半夜,斗图大会,八仙过海,各显神通,良辰日天齐上阵。不服,下载鬼畜表情,参加到战斗中,无奈啊,app做的不是太方便,想起抓包把图片一下都下载下来,想起最近看到RN,正好练练手。 单文件批量抓取/** * Sample React Native App * https://github.com/hanks-zyh/233333 */'use stric
2016-01-25 01:03:38
2110
原创 Framework分析-Application的onCreate
ActivityThread并不是一个Thread,而是一个单纯的Java类,查看一下 ActivityThread 的源码final class ActivityThread,并没有继承Thread或者实现Runnable接口,ActivityThread 其中包含 main 方法,程序的入口地方,怎么看出来的呢? 我们开发过程中总会出现程序异常信息,细心看一下log,查看最下面的几行,最终问题出
2016-01-25 01:02:13
809
原创 Android性能优化
布局优化,绘制优化,内存泄露优化,响应速度优化,listview优化,bitmap优化,多线程优化 Traceview,Systrace,Oprofile,Heap Viewer,Memory Monitor,Allocation Tracker 量化流畅度布局优化 include 重用布局 merge 减少层级嵌套 viewstub 延迟加载 space 空白占位绘制优化
2016-01-25 01:00:32
695
翻译 Android 下雪动画
原文链接 : Snowfall 原文作者 : Styling Android 译文出自 : hanks.xyz 译者 : hanks-zyh 校对者: desmond1121 状态 : 完成 这本是一个愉快的季节,但是,呵呵,胡扯! 因为这篇文章的发表时间是2015年的圣诞节,所以我们需要给Style Android用制造出一些节日气氛。感谢读者们,因为有的读者可能没有在
2015-12-30 18:22:04
1585
原创 React-Native 知乎日报首页
主要练习从服务器获取数据,然后展示到界面,最外层用ScrollView包裹起来顶部是一个ViewPager,api使用的知乎日报的api,在这里只使用了一个主题日报列表查看的api,获取到json数据之后,显示到ListView中.最终效果如下:获取网络数据根据前面的文章React-Native 网络请求使用fetch方法来获取_getData:function(){ var datas = [
2015-12-30 18:21:30
1608
原创 React-Native 组件练习-购物app侧滑菜单
参照官方例子练习组件的使用,练习View Image Text 还有Android平台的DrawerLayoutAndroid 效果图: React-Native 中的 width,height的 100%在React-Native 中没有百分比这样的宽高,但是有替代的,具体见 issue flex:1 相当于 height:100% alignSelf:'stretch' 相当于 wid
2015-12-26 14:19:49
3544
原创 React-Native中的布局
title: React-Native中的布局 date: 2015-12-21 15:11:14 tags:- React-NativeReact-Native 使用 FlexBox布局来放置元素 Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为Flex布局。FlexboxalignItems enum('fle
2015-12-26 14:18:26
692
原创 运行React-Native例子UIExplorer
运行 FaceBook 给出的例子UIExplorer, 由于网络问题折腾了半天, 在公司网络死活不行,到家一小会儿搞定. 原因是我使用 npm install 的时候 直接 ctrl+c 断掉了, 需要把目录下的node_modules文件夹删除再重新安装.关于NPMNPM小结react-native 环境参考前面:Ubuntu进行 react-native 的开发APK运行到模拟器git clo
2015-12-26 14:16:52
2411
原创 Ubuntu进行 React-Native 的开发
尝试在 Ubuntu 14.04 上面进行 react-native 的开发, 安装官方文档进行配置,记录配置流程安装 node.js在官网下载源码安装即可, 安装后查看版本$ node -v安装 watchman文档安装依赖$ sudo apt-get install autoconf automake python-dev 安装 watchman, 如果出错, 查看安装依赖的详细文档$ gi
2015-12-26 14:15:25
1712
原创 Rx中的线程切换
初学者在使用RxJava的过程中,经常搞不清Observable的事件序列和每次操作应该怎样切换线程,切换哪个线程 首先需要搞懂在RxJava 中.subscribeOn() 和 observeOn() 之间的区别: - .subscribeOn() 用来指定Observable应该操作的调度器(Scheduler) - .observeOn() 指定 Observable在一个指定的调度器
2015-12-26 14:13:28
1101
原创 使用RxJava 提升用户体验
使用RxJava 提升用户体验 原文链接:https://medium.com/@diolor/improving-ux-with-rxjava-4440a13b157f#.qdhu122d1 翻译: hanks“网络永连接,服务器不出错,培根没肥肉”友好的用户体验通常是用户很爽,但开发者很痛苦。 当用户点击一个按钮后,因为后端没有及时响应而卡住界面,这回让用户很失望。 现在让我们创建
2015-11-29 23:39:15
1286
原创 adb 无线调试
adb 无线调试 通过wifi链接adb, 也是插件 AndroidWiFiADB 的原理 前提: 电脑和手机在同一局域网下adb connect 命令adb connect <host>[:<port>]通过USB线连接电脑查看 adb 连接的设备列表$ adb devices -lList of devices attached005deabe1919a90b
2015-11-18 17:26:01
856
转载 解析 dex 文件结构 - DexHeader
原文: http://kiya-z.github.io/2015/11/17/parse-dex-file-part-dex-header/解析 dex 文件结构 - DexHeader发表于 2015-11-17 | 分类于 Android | 暂无评论 | 6 Hits简介dex 文件是 dalvik 虚拟机的可
2015-11-18 11:02:17
2726
转载 如何运行 .smali 程序
原文: http://kiya-z.github.io/2015/11/16/how-to-run-file-ended-with-smali/如何运行 .smali 程序发表于 2015-11-16 | 分类于 Android | 暂无评论 | 3 Hits准备 smali 程序从 《Andro
2015-11-17 11:53:37
1614
转载 校验数字签名防止 apk 被二次打包 - Java层校验(大众点评为例)
原文链接: http://kiya-z.github.io/2015/11/12/check-signature-for-avoiding-fake-app-java-level-check/测试环境Ubuntu 14.04Lenovo Android 5.1Lenovo Android 4.2.2Android Studio普及签名包名知识包名 (Pac
2015-11-17 11:51:34
2900
原创 上传自己的库到jcenter
# 注册 [https://bintray.com/](https://bintray.com/)注册一个账号。获取API Key[https://bintray.com/profile/edit](https://bintray.com/profile/edit) # 创建与配置项目1. 修改项目目录下的 `build.gradle`,添加依赖```// Top-level build fi
2015-10-31 20:24:14
1015
PixateViewsDemo.zip
2015-03-22
pixate.jar
2015-03-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人