- 博客(28)
- 收藏
- 关注
原创 Jsoup 在 Android 中的尝试
Jsoup 是一款 Java 的 HTML 解析工具,主要是对 HTML 和 XML 文件进行解析。所以,对 JS 动态生成内容的支持并不好。 如果想解析 HTML,因为不同网站的情况不同,一些简单的网站可以通过下面的方法尝试(复杂的我也还不会)。 具体解析要依据网站的结构,如果对前端有些了解大概能更好理解。 HTML 解析 首先添加依赖: implementation 'org.jsoup:jsoup:1.14.1' 第一种方式: 通过 Jsoup.connect 的方式来解析 private.
2021-07-20 23:28:54
698
3
原创 Android BottomSheetDialog
MD 风格的底部弹窗,比自定义 Dialog 或 PopupWindow 使用更简单,功能也更强大,比如可以方便的实现拖拽关闭。 细分来说,分为 BottomSheet、BottomSheetDialog、BottomSheetDialogFragment。 BottomSheet:依赖于 CoordinatorLayout 和 BottomSheetBehavior,需要将底部菜单作为CoordinatorLayout 的子 View,并且有三个关键的属性需要其设置。 app:layout_beha.
2021-07-15 09:06:45
2381
原创 Linux 基础-基本命令
Linux 基础知识 基本命令 cd:用于切换当前工作目录。 jianghouren@jianghourendeMacBook-Pro ~ % cd test jianghouren@jianghourendeMacBook-Pro test % 在 test 目录跳转到 Downloads 目录 jianghouren@jianghourendeMacBook-Pro test % cd ~/Downloads jianghouren@jianghourendeMacBook-Pro Download.
2021-03-13 10:25:59
263
原创 Android 手势检测
手势检测 Android 手势检测,也就是对 GestureDetector 的使用。 而 GestureDetector 则可以使用 MotionEvents 检测各种手势和事件。 GestureDetector.OnGestureListener 是个回调方法,在发生特定事件时会调用 Listener 中对应的方法回调。 这个类只能用于检测触摸事件的 MotionEvent,不能用于轨迹球事件。 使用步骤 创建一个 GestrueDetector 实例 在 onTouchEvent(MontionE.
2021-02-08 11:42:02
768
1
原创 Android 自定义 View 三步骤
自定义 View 三步骤 自定义View三步骤,即:onMeasure()(测量),onLayout()(布局),onDraw()(绘制)。 onMeasure() 首先我们需要弄清楚,自定义 View 为什么需要重新测量。正常情况下,我们直接在 XML 布局文件中定义好 View 的宽高,然后让自定义 View 在此宽高的区域内显示即可。但是为了更好地兼容不同尺寸的屏幕,Android 系统提供了 wrap_content 和 match_parent 属性来规范控件的显示规则。它们分别代表自适应大小和.
2021-02-07 08:12:16
2650
2
原创 Android 自定义 View 分类
自定义 View 分类 继承View重写onDraw方法。实现一些不规则效果。需要自己支持wrap_content,padding也需自己处理。 继承ViewGroup派生特殊的Layout。实现自定义布局。需要合适的处理ViewGroup的测量和布局这两个过程,并同时处理子元素的测量和布局过程。 继承特定的View(如TextView)。用于扩展。不需要自己支持wrap_content,padding等。 继承特定的ViewGroup(如LinearLayout)。用于扩展。不需要处理ViewGrou.
2021-02-06 21:53:19
158
原创 Android 属性动画
属性动画框架 属性动画可以使用 ViewPropertyAnimator、ObjectAnimator、ValueAnimator 这三种 Animator。 它们其实是一种递进的关系:从左到右依次变得更加难用,也更加灵活。但它们的性能是一样的,因为 ViewPropertyAnimator 和 ObjectAnimator 的内部实现其实都是 ValueAnimator,ObjectAnimator 更是本来就是 ValueAnimator 的子类,它们三个的性能并没有差别。 它们的差别只是使用的便捷性.
2021-02-01 06:40:34
404
1
原创 Android View 动画
View 动画框架 使用 View 动画框架可以在 View 上执行补间动画。 补间动画是指,只要指定动画的开始与结束的“关键帧”,而动画变化的“中间帧”由系统计算并补齐。 动画并没有改变 View 的实际位置,仅是改变了 View 的显示位置。 FILE LOCATION: res/anim/filename.xml The filename will be used as the resource ID. COMPILED RESOURCE DATATYPE: Resource.
2021-01-31 07:31:17
435
原创 Android 逐帧动画
逐帧动画 帧动画也属于 View 动画,只是它的表现形式和其它四种不太一样。 帧动画是顺序播放一组预先定义好的图片,通过 AnimationDrawable 类来使用。 它比较容易引起 OOM,所以使用时应尽量避免使用过多尺寸较大的图片。 用来逐帧显示预先定义好的一组图片,类似于电影播放。对应于AnimationDrawable类。 FILE LOCATION: res/drawable/filename.xml The filename will be used as the resou.
2021-01-31 07:30:58
333
2
原创 Android 动画
概述 动画的本质,其实就是把内容的两个状态平滑的过度,而不是直接切换。 示例: /** * 通过不断平移 * 来实现动画效果 */ float newTranslationX = 0; public void translationX(View view){ Runnable runnable = new Runnable() { @Override public void run() {.
2021-01-30 20:34:30
360
2
原创 C 语言基础
C 语言基础 // 引入头文件。里面包含了重要的 printf。 #include <stdio.h> // 入口函数。 // 参数一指输入的参数个数,参数二保存了所有参数。 // 返回值为 int 类型,一般 0 代表成功,负数代表失败。 int main(int argc,char* argv[]){ printf("Hello World!\n"); return 0; // 代表执行成功。 } 通过指令的编译与执行: MAC 下的编译使用 clang,Linux 下
2021-01-20 14:40:11
199
原创 Android Material Design
Toolbar 由 AndroidX 库提供的用来替代 ActionBar 的一个控件。 详细信息 ActionBar 即每个 Activity 最顶部的那个标题栏,任何新建的项目默认都会显示,但它被限定只能位于 Activity 的顶部,从而不能实现一些 Material Design 的效果,因此官方现在已经不再建议使用,可在 res/values/styles.xml 文件中设置为不带 ActionBar 的主题。更加推荐的是 Toolbar,它不仅继承了 ActionBar 的所
2021-01-20 14:27:51
454
原创 Jetpack 高级程序开发组件
Jetpack 简介 Jetpack 是一个开发组件工具集,它的主要目的是帮助我们编写出更加简洁的代码、并简化开发过程。 Jetpack 中的组件有一个特点,它们大部分不依赖于任何 Android 系统版本,这意味着这些组件通常是定义在 AndroidX 库当中的,并且拥有非常好的向下兼容性。 Jetpack 家族主要由基础、架构、行为、界面这 4 个部分组成。其中也不全是些新东西,像通知、权限、Fragment 都属于 Jetpack。 ViewModel ViewModel 的一个重要作用就是可以帮助
2021-01-20 14:19:18
267
原创 Kotlin 扩展课堂
Kotlin 中的小魔术 字符串内嵌表达式 fun main(){ // Kotlin 中字符串内嵌表达式的语法规则: // "hello, ${obj.name}, nice to meet you! " // 当表达式仅有一个变量时,可将大括号省略。 // "hello, $name, nice to meet you! " val brand = "Samsung" val price = "1299.99" println("Cellphone(brand
2021-01-20 13:08:47
182
原创 Kotlin 与 Java 代码之间的转换
Java 代码转换成 Kotlin 代码 有许多老项目是使用 Java 语言编写的,而现在想要转换成 Kotlin 语言,最笨的转换方式就是对每一行代码都重新手动编写。 第一种转换方式 事实上,将 Java 代码转换成 Kotlin 代码,在语法层面上是有一定规律的,而 Android Studio 给我们提供了非常便利的功能来一键完成这种转换工作。 首先,只要复制一段 Java 代码,然后在 Android Studio 中的任意一个 Kotlin 文件中进行粘贴,Android Studio 都会弹出提
2021-01-20 13:08:15
2843
2
原创 Kotlin 使用 DSL 构建专有的语法结构
DSL 的全称是领域特定语言(Domain Specific Language),它是编程语言赋予开发者的一种特殊能力,通过它我们可以编写出一些看似脱离其原始语法结构的代码,从而构建出一种专有的语法结构。 在 Kotlin 中,实现 DSL 的方式并不固定。这里主要的学习目标是通过高阶函数的方式来实现 DSL,这也是 Kotlin 中实现 DSL 中最常见的方式。 在 Android 中,Gradle 是一种基于 Groovy 语言的构建工具,因此,当我们在 build.gradle 中添加依赖库时所编写的
2021-01-20 13:07:51
262
原创 Kotlin 泛型
泛型和委托 泛型的基本用法 Java 早在 1.5 版本中就引入了泛型的机制,因此,Kotlin 自然也就支持了泛型功能。但是 Kotlin 中的泛型与 Java 中的泛型有同有异,这里先看与 Java 中相同的部分。 泛型,是指在一般的编程模式下,我们需要给任何一个变量指定一个具体的类型,而泛型允许我们在不指定具体类型的情况下进行编程,这样编写出来的代码将会拥有更好的扩展性。比如 List 就是使用泛型来实现的。 泛型主要有两种定义方式,一种是定义泛型类,另一种是定义泛型方法,使用的语法结构都是<T
2021-01-20 13:07:25
1330
原创 Kotlin 协程
协程,可以将它简单地理解成一种轻量级的线程。要知道,之前所学习的线程是非常重量级的,需要依靠操作系统的调度才能实现不同线程之间的切换。而使用协程却可以仅在编程语言的层面就能实现不同协程之间的切换,从而大大提升了并发编程的运行效率。 协程允许我们在单线程模式下模拟多线程编程的效果,代码执行时的挂起与恢复完全是由编程语言来控制的,和操作系统无关。这种特性使得高并发程序的运行效率得到了极大地提升。 为什么要使用协程? 轻量、高效 简单、好用 可以用同步的方式编写异步代码 协程的基本用法 添加依赖 首先要添加依
2021-01-20 13:06:11
363
原创 Kotlin 高阶函数
定义高阶函数 高阶函数和 Lamdba 的关系是密不可分的。像接收 Lambda 参数的函数就可以称为具有函数式编程风格的 API,而如果想定义自己的函数式 API,那就得借助高阶函数来实现了。 高阶函数的定义:如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。(这里的另一个函数指的是函数类型,就像整型等。) 函数类型的基本语法规则:(String, Int) -> Unit -> 左边部分用来声明该函数接收什么参数,多个参数之间用逗号隔开,如果不接收任
2021-01-20 13:05:14
301
原创 Kotlin 语言入门
语言简介 编程语言大致可以分为两类:编译型语言和解释型语言。 编译型语言的特点是编译器会将我们编写的源代码一次性地编译成计算机可识别的二进制文件,然后计算机直接执行,像 C/C++ 都属于编译型语言。 解释型语言的特点是它有一个解释器,在程序运行时,解释器会一行行地读取我们编写的源代码,然后实时地将这些源代码解释成计算机可识别的二进制数据后再执行,因此解释型语言通常效率会差一些,像 Python 和 JavaScript 都属于解释性语言。 Java 属于解释性语言。Java 代码编译之后生成的并不是计算机
2021-01-20 09:06:28
801
原创 Mac 本地服务器
最近做 Web 项目遇到一些问题,比如获取本地文件相关,或者 iframe 的传值问题,使用本地文件的方式(file:///)是无效的。而每次上传到阿里云服务器上来测试又太麻烦,所以可使用 Mac 自带的 Apache 服务器。 配置流程 1、创建文件夹 在家目录创建一个文件夹 Sites ,创建后这个文件夹会有所不同,文件夹上面有一个网络的标记。(提示:家目录也就是用户名目录,没有家目录的在 访达(Finder)-> 偏好设置-> 勾选家目录) 2、打开文件 打开终端,切换工作目录,进入 ap
2021-01-16 09:12:48
420
原创 Java 代码块与函数的执行顺序
代码块与函数的执行顺序: 父类优先子类,静态优先普通,构造代码块优先构造函数。 public class A { public A(){ System.out.println("A 构造函数"); } static { System.out.println("A 静态代码块"); } { System.out.println("A 构造代码块"); } public void APrint(){
2021-01-16 08:56:17
199
原创 Android 音频
AudioRecord API详解 AudioRecord 是 Android 系统提供的用于实现录音的功能类。接下来实现使用 AudioRecord 采集音频 PCM 并保存到文件。 AndioRecord 类的主要功能是让各种 JAVA 应用能够管理音频资源,以便它们通过此类能够录制声音相关的硬件所收集的声音。此功能的实现就是通过 ”pulling”(读取)AudioRecord 对象的声音数据来完成的。在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取 AudioRecord 对象
2021-01-16 08:33:14
642
原创 音视频基础知识
Android 音视频开发的难度相对较高,音视频开发中很多有特色的或者核心的模块使用 NDK 开发,而 NDK 开发又主要使用 C/C++ 语言编写代码 ,这对于使用 Java 语言的 Android 开发者来说有门槛。音视频应用从业方向;算法方向,工程方向。 音视频基础知识 如图所示,这是一个 MP4 的视频文件的属性,可以看到在更多信息栏里编解码器有 AAC、H.264,这个就是视频的音频编码和视频编码,而 MP4 其实就是封装协议。 一般情况下,视频流从加载都准备播放是需要经过解协议、解封装、解编
2021-01-13 16:04:56
357
原创 在 AS 中运行 java 类报错
在 AS 中运行 java 类报错: Error:Gradle: failed to create directory 'E:\jhrFile\SortApplication\app\build\generated\source\r\debug\com\example\sortapplication'. Error:Gradle: java.util.concurrent.ExecutionE...
2019-11-06 17:12:09
410
原创 AndroidStudio新版本3.1.3导入旧版本项目出现的问题
遇到了这个,别Update,我应该就是第三方用得太多。详细参考;https://blog.csdn.net/qq_36009027/article/details/79009268
2018-06-28 13:30:42
2875
原创 AS导入项目报错Error:Your project path contains non-ASCII characters.
具体报错信息如下;解决办法;其实就是 工程项目路径 或者 项目名称 包含了中文对于像我这种英文不好的人,确实挺尴尬。虽说英文不是硬性标准,但提升一下还是很有必要的。参考;对的,我们要专业,不仅限于包名,还有像类名,方法名等等......https://blog.csdn.net/lovejjfg/article/details/50574140注;如果有任何其他问题,像侵权或建议等,请联系我,谢谢...
2018-06-22 19:47:08
1124
原创 AS版本3.0.1新建项目报错Error:Execution failed for task ':app:preDebugAndroidTestBuild'。
具体报错信息如下;查到的解决办法有两种;1;Build->Rebuild Project,临时解决,重新打开项目还是会报错。2;在app下的build.gradle文件中的dependences {}中添加如下代码: androidTestCompile('com.android.support:support-annotations:26.1.0') { fo...
2018-06-21 18:23:56
378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅