【Flutter】绘制图形原理 1 Canvas画布API名称功能drawLine画线drawPoint画点drawPath画路径drawImage画图像drawRect画矩形drawCircle画圆drawOval画椭圆drawArc画圆弧1.1 drawLine使用方法及源码分析使用方法:源码: /// Draws a line between the given points using the given paint. The line
【Flutter】时间轴高度自适应最佳实践 1 使用部件画圆圈:使用 canvas.drawCircle 和属性为_paint.style = PaintingStyle.fill;画笔画两个实心圆;画竖线:使用 canvas.drawLine 和属性为_paint.style = PaintingStyle.stroke;的画笔画直线,通过 p1 和 p2 两个端点使直线为竖线在 Container 中调用 decoration 组件使用 BorderTimeLine 类。decoration: BoxDecoration(border:
【Android】Gradle入门 是什么?在语法上是基于Groovy语言的(Groovy 是一种基于JVM的敏捷开发语言,可以简单的理解为强类型语言java的弱类型版本),在项目管理上是基于Ant和Maven概念的项目自动化建构工具。基础知识准备Java基础,命令行使用基础官方文档:https://docs.gradle.org/current/dsl/Gradle使用指南: https://gradle.org/docs/current/userguide/userguideAndroid插件文档:https://github
【Flutter】使用GridView实现二维网格列表 1 GridView构造函数GridView({ Axis scrollDirection = Axis.vertical, bool reverse = false, ScrollController controller, bool primary, ScrollPhysics physics, bool shrinkWrap = false, EdgeInsetsGeometry padding, @required SliverGridDelegate gridDe
【Flutter】详解BuildContext framework.dart中BuildConttext源码:/// The [BuildContext] for a particular widget can change location over time as/// the widget is moved around the tree. Because of this, values returned from/// the methods on this class should not be cached beyond the exe
【Flutter】应用开发笔记 1 获取Flutter SDK1.下载安装包2.将压缩包解压,然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中勿将 Flutter 安装在需要高权限的文件夹内,例如 C:\Program Files\。2 配置环境变量2.1 更新path环境变量Environment Variables->User Variables->PATH->New加入 flutter\bin 目录的完整路径配置国内镜像,新增加环境变量2.2 配置Andro
【Flutter】Dart学习笔记 1 变量(Variables)var name = 'Bob';Dart可自动推断变量的类型,也可以为变量指定类型,如果一个对象的引用不局限于单一的类型,可以将其指定为 Object(或 dynamic)类型。推荐通过 var 声明局部变量而非使用指定的类型未初始化变量默认值为null,包括数字,因为在 Dart 中一切皆为对象,包括数字。Final和Const这两个关键字可以替代 var 关键字或者加在一个具体的类型前。一个 final 变量只可以被赋值一次;一个 const 变量是一个编译时
【Android】字节码插桩(一) 1 摘要字节码插桩技术可以帮我们实现业务层模块和功能模块的关联,并在项目结构避免其耦合,比如ARouter实现各模块路由表的注册;2 背景一般我们使用Transform会有下面两种场景我们需要对编译class文件做自定义的处理。 我们需要读取编译产生的class文件,做一些其他事情,但是不需要修改它。本篇主要介绍完成字节码插桩的第一步,通过Transform将编译后的class文件和jar包找到并输出;3 正文Transform的基本API参考:Transform的抽象方法:publi
[Android]使用 Jetpack DataStore 进行数据存储 欢迎使用 Jetpack DataStore,这是一个经过改进的全新数据存储解决方案,旨在替代原有的 SharedPreferences。Jetpack DataStore 基于 Kotlin 协程和 Flow 开发,并提供两种不同的实现: Proto DataStore 和 Preferences DataStore。其中 Proto DataStore,可以存储带有类型的对象 (使用 protocol buffers 实现);Preferences DataStore,可以存储键值对。在 DataSto
【Android】冷启动优化 1、app的启动流程App启动的描述。应用启动分为冷启动、热启动、温启动。而冷启动是应用程序从零开始,里面涉及到更复杂的知识。我们这次主要是对应用的冷启动进行分析和优化。应用在冷启动的时候,需要执行下面三个任务:加载和启动应用程序;App启动之后立即展示出一个空白的启动窗口;创建App程序的进程;在这三个任务执行后,系统创建了应用进程,那么应用进程会执行下一步:创建App对象;启动Main Thread;创建启动页的Activity;加载View;布置屏幕;进行初始绘制当应用进程
【Android】MediaStore三种刷新方式简介 1、Media是MediaStore的内部类(MediaStore.Image.Media),它提供了几个insertImage方法,以方便我们想MediaStore插入图片数据,该操作会生成一张缩略图。插入有两个重载方法,一个是传入图片路径,一个是传入Bitmap;区别:传入图片路径的方法,会将制定的图片拷贝一份到Picture目录下,也就是SDCARD中共有两种相同的图片。传入Bitmap的方法,会将图片直接保存到Picture目录下。/**Insert an image and creat
【Android】Jetpack的Data Binding库 Data Binding库支持使用声明性格式而不是以编程方式将layout中的UI组件绑定到应用程序中的数据源。我们通常在Activity中声明layout,并通过UI框架方法获取到UI控件。例如,下面代码演示调用findViewById()去获取TextView控件,然后将它绑定到viewModel的userName。TextView textView = findViewById(R.id.sample_text);textView.setText(viewModel.getUserName())
【Android】动画设置监听器的一个方法 设置监听器的方法, ViewPropertyAnimator 和 ObjectAnimator 略微不一样: ViewPropertyAnimator 用的是 setListener() 和 setUpdateListener() 方法,可以设置一个监听器,要移除监听器时通过 set[Update]Listener(null) 填 null 值来移除;而 ObjectAnimator 则是用 addListener() 和 addUpdateListener() 来添加一个或多个监听器,移除监听器则是通过
【Android】Android Studio Database Inspector 使用 今天在逛技术网站的时候,看到了一个好东西,Database Inspector 第一眼看上去感觉没有用过,老样子赶紧百度一下,发现基本没有这方面的文章,看来这个应该是在内测还未推出的工具,首先说一下 Database Inspector 是干什么的?其实要解决的问题就是我们在调试数据库的时候,使它可以想编辑 Excel 一样的简单,直接修改直接生效,这有什么好处呢?不用我们在一点一点的去 Debug 数据了,这个看来还是非常有用的。本来想找一些资料来整理一下,但无意间看到一个 Google 的大佬工程师已
【Android】线程池管理部分浅析 一、AsynTask1、构造NuAsyncTask实例该类是一个泛型类,取消了Process参数(因为更多情况下使用不到,保证接口的简洁性),只保留了Params,Result类型参数;另外,构造函数必须要求传入一个workName,以便来跟踪任务的执行时间。因为AsyncTask任务可以调用取消接口,所以该类为了保证功能的一致性,定义了一个NuFutureRunnable类,以来可以取消提交的任务。2、抽象接口定义抽象接口的定义,同AsyncTask的 doInBackground,onP
《第一行代码》调用相机部分适配Android10/11 摘要《第一行代码》中的调用相机程序在新版本的Android10/11中已经不完全适用,会出现闪退等问题,此文针对需要修改的内容作出特别说明正文1.必须在AndroidManifest中添加CAMERA权限否则会导致闪退 <uses-permission android:name="android.permission.CAMERA"/>2.添加provider用于文件的存储和读取android:authorities的参数必须与FileProvider.getUriForFile中
【Android】线程池缓存简介 1、缓存线程池创建缓冲池没有核心线程数为0,没有上限,线程空闲保存60s存活时间,任务队列采用的SynchronousQueue队列2、线程池实例化后就可以执行任务,一般通过execute方法调用分为3个步骤:步骤1:线程任务小于核心线程数,由于缓存线程池corePoolSize=0,所以该步骤不会被执行到步骤2:判断队列是否添加成功,由于采用的SynchronousQueue队列,所以一般情况下该offer对象返回false,不会执行该分支代码步骤3:队列添加失败,就直接执行任务addWo