自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卜大爷的博客

不急不躁

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 Flutter 计算两个日期的时间差

Flutter 计算两个日期的时间差我们在开发中,如果遇到计算2个日期相差多少天,用什么方法获得呢?如果需要知道两个日期相差多少小时、多少分、多少秒,又该如何计算呢?其实在 Flutter 中,想要计算日期和时间的差值非常简单,是需要使用 difference 函数即可。下面举例来说明。示例1. 计算两个日期相差多少天?var startDate = new DateTime(2020, 12, 20);var endDate = new DateTime.now();var days =

2020-12-30 20:15:40 31548 2

原创 Flutter中Row中的子控件左右两端对齐(四种方法)

Flutter中Row中的子控件左右两端对齐假如我们要实现这样一个效果:两个子控件(例如2个文本)在一行显示,但我们想让它们分别左右两侧对齐,也就是左右一边一个。如何实现呢?方法一:设置 spaceBetween 对齐方式设置 Row 控件的属性 mainAxisAlignment:mainAxisAlignment: MainAxisAlignment.spaceBetween,方法二:Expanded 填充使用 Expanded 中间填充布局空间:new Row( children

2020-12-30 20:14:28 34778 1

原创 Flutter 设置文本框背景

Flutter 设置文本框背景先来看最终效果: 普通文本框样式的设置以下设置一个普通的文本框样式:new TextField( controller: _titleTxt, keyboardType: TextInputType.text,//键盘类型 decoration: InputDecoration(//文本框样式设置 contentPadding: EdgeInsets.all(10.0),//内容边距 labelText: '标题',//输入框的描述文本

2020-12-30 20:13:24 26164

原创 Flutter 弹出键盘报错解决

Flutter 弹出键盘报错解决错误原因报错页面:错误原因:当一个页面的内容不能全部展示出来时,就会出现这种错误。其实这里如果没有键盘弹出,内容长度超过屏幕可显示范围,同样会报错。解决方法这个问题也很容易解决,2种方法。设置 Scaffold 的 resizeToAvoidBottomPadding 属性为 false,这样页面就不会随着键盘弹起而滚动(该方法只针对弹出键盘报错的情况,如果页面内容长度超过屏幕可显示范围,该方法无效)。Scaffold( resizeT

2020-12-29 19:15:09 24632 2

原创 Flutter 中 Card 设置圆角

Flutter 中 Card 设置圆角圆角设置非常常用,本文介绍 Card 容器组件的圆角等设置方法。圆角设置//shape 设置边,可以设置圆角shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(20.0)),),单独设置每个圆角大小我们也可以分别设置每个圆角的大小:shape: RoundedRectangleBorder( borderR

2020-12-29 19:12:42 29191

原创 Fulutter 设置圆角背景图片&Container 设置边框、圆角、阴影

Fulutter 设置圆角背景图片&Container 设置边框、圆角、阴影在 Flutter 中,如何实现背景图片呢?又如何实现带圆角的背景图片呢?Fulutter 设置圆角背景图片使用 Container 的 decoration 可以很方便的设置一个容易组件背景图片的圆角大小:Container( decoration: ShapeDecoration( image: new DecorationImage( /

2020-12-29 19:11:48 28050 2

原创 Flutter 圆角图片的几种实现

Flutter 圆角图片的几种实现圆角图片是 APP 开发中的常用设置,我们在 Flutter 中如何实现呢?使用 ClipRRect 实现第一种方式,直接使用 ClipRRect 实现,非常简单:ClipRRect( borderRadius: BorderRadius.circular(10), child: Image.asset('assets/images/task_icon.jpg'),),使用 Card 实现第二种方式,使用 Card 来实现:Card( sha

2020-12-29 19:10:41 25990 2

原创 在 Flutter 中显示本地图片

在 Flutter 中显示本地图片1. 创建图片资源目录首先要创建图片资源目录,以存放图片。在项目根目录,创建一个 assets 目录,在它的下面,创建一个叫 images 的子目录,用于存放图片资源:/assets/images/2. 将本地图片添加到资源目录将我们需要用到的图片,添加到 /assets/images/ 目录中。3. 在 pubspec.yaml 中注册将图片目录配置到 pubspec.yaml 文件中:flutter: assets: - assets

2020-12-29 19:09:13 31226

原创 flutter 中如何获取输入文本框的内容

flutter 中如何获取输入文本框的内容在开发中,我们经常会用到输入框,那么在 flutter 中,如何获取当前输入框中的文本内容呢?创建输入文本框输入框,我们使用 TextField 这个 Widget,可以非常简单的创建。示例:new TextField( keyboardType: TextInputType.number, decoration: InputDecoration( contentPadding: EdgeInsets.all(10.0), lab

2020-12-28 20:26:19 26752 5

原创 Flutter 日期选择控件使用实战

Flutter 日期选择控件使用实战日期选择是 App 开发中的常见功能,本文我们将学习如何在 Flutter 中使用日期选择控件。日历控件显示的几种方式flutter 包含日历和时间控件,有以下几种:DayPicker:已弃用。v1.15.3之后改用 CalendarDatePicker。CalendarDatePicker:1.5版后面的日期选择控件,替代了 YearPicker、MonthPicker、DayPicker。CupertinoDatePicker、CupertinoTim

2020-12-28 20:22:01 27169

原创 Flutter 日历组件如何支持中文(国际化)

Flutter 日历组件如何支持中文(国际化)在 App 开发中,我们通常需要用到国际化的支持。Flutter 在默认情况下就是支持国际化,但是在没有进行特别的设置之前,它们无论在什么环境都是以英文的方式显示的。例如,我们显示一个日历组件,默认是英文展示的。我们想要改成中文,或者添加其他语言支持应该怎么做呢?设置语言支持步骤本例中,我们将要为日历组件,添加中文支持。我们来看怎么做?1. 在 pubspec.yaml 中添加如下依赖:flutter_localizations: sdk

2020-12-28 18:05:09 24766 2

原创 Flutter中2个库的类名冲突解决方法

Flutter中2个库的类名冲突解决方法例如,我们在使用国际化时,会给组件(如,日历组件),设置一个本地属性来显示当地语言:locale: Locale("zh")上例中,显示中文。当我们引用第三方库 date_format 来格式化日期时,由于 date_format 库中,也包含了 Locale 组件,这时,就会报错。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lUi4kEip-1609149717960)(evernotecid://6FE75482-5

2020-12-28 18:02:28 27509 12

原创 Flutter DateTime日期获取&字符串与日期之间转换

Flutter DateTime日期获取&字符串与日期之间转换DateTime 可以用来获取和设置日期和时间,在开发中常用的一个类。DateTime 的主要属性和方法DateTime 主要方法和属性如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bdZuV9ps-1609149646790)(evernotecid://6FE75482-54A0-433A-9625-A01F7FEE92EC/appyinxiangcom/9896050/ENResour

2020-12-28 18:01:38 32558 8

原创 Flutter 日期格式化库 date_format

Flutter 日期格式化库 date_format第三方库 date_format 可以很方便的对日期进行格式化处理,转换成相应格式的字符串输出。添加依赖库首先,在应用的包目录下,找到 pubspec.yaml 文件,并添加如下依赖:dependencies: date_format: ^1.0.9更新依赖包直接在 Android Studio 中点击“Pub get"或者使用如下命令:flutter pub get导入库import 'package:date_f

2020-12-27 16:10:01 35540

原创 Android ContentProvider 的使用&源码分析(Android Q)

本文详细讲解了 ContentProvider 从安装包中解析,ContentProvider 的创建、注册、发布等各个过程。以及介绍了 ContentProvider 的简单使用。

2020-12-27 15:47:33 23657

原创 源码分析 merge 标签减少布局层级的秘密(Android Q)

本文从源码的角度分析 merge 标签减少布局层级的秘密(Android Q)

2020-12-21 20:10:37 23430

原创 Android 主线程与子线程关系详解

Android 主线程与子线程关系详解主线程与屏幕渲染当用户启动一个的应用时,Android 会创建新的 Linux 进程以及执行线程。这个主线程也称为界面线程(UI 线程),负责屏幕上发生的一切活动。Android 中,主线程的设计非常简单:它的唯一工作就是从线程安全工作队列中,获取任务(工作块)并执行,直到应用被终止。主线程执行的这些任务来源有以下几个:与生命周期信息、用户事件(例如输入)或来自其他应用和进程的事件相关的回调。当然,我们在应用开发中也可以不使用框架而自行实现任务队列。应用执行的

2020-12-17 16:25:09 27430

原创 Android 渲染性能优化——技能图

Android 渲染性能优化——技能图以上是渲染性能优化技能概览图,详细内容请看:《Android 渲染机制——原理篇(显示原理全过程解析)》《Android 渲染性能优化——你需要知道的一切!》还有更多、更多。。。–>《Android 性能优化》...

2020-12-10 20:33:50 23620

原创 Android 渲染性能优化——你需要知道的一切!

本文将分以下几个部分来分析和总结渲染性能:帧率和渲染性能问题、渲染性能问题产生的原因、渲染性能优化方法、分析工具。

2020-12-10 20:28:37 26371

原创 View 的 requestLayout 发起的重绘流程源码分析(Android Q)

View 的 requestLayout 发起的重绘流程源码分析(Android Q)我们平时经常会调用 View 类的 requestLayout 方法更新视图,那么它又是如何发起的重绘逻辑呢?View 的 requestLayout 方法: public void requestLayout() { …… if (mParent != null && !mParent.isLayoutRequested()) { //

2020-12-10 18:13:27 23391 2

原创 Android 性能分析工具——Perfetto 介绍

Android 性能分析工具——Perfetto 介绍Perfetto 是 Android 10 中引入的全新平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的更加通用和复杂的开源跟踪项目。与 Systrace 不同,它提供数据源超集,可让你以 protobuf 编码的二进制流形式记录任意长度的跟踪记录。你可以在 Perfetto 界面中打开这些跟踪记录。相对的,Systrace 是平台提供的旧版命令行工具,可记录短时间内的设备活动,并保存在压缩的文本文件中。该工具会生成一份

2020-12-09 18:01:25 37914 1

原创 Android 渲染机制——原理篇(显示原理全过程解析)

帧率每秒的帧数(fps)或者说帧率是以帧为单位的位图图像每秒连续出现在显示器上的次数(速率)。简单来说就是一秒钟,屏幕显示多少张画面。为什么是 60fps ?人类视觉的时间敏感度和分辨率根据视觉刺激的类型和特征而变化,并且在个体之间不同。人类视觉系统每秒可处理10到12个图像并单独感知它们,而较高的速率则被视为运动。12fps 大概类似手动快速翻动书籍的帧率,这明显是可以感知到不够顺滑的。24fps 使得人眼感知的是连续线性的运动,这其实是归功于运动模糊的效果。24fps 是电影胶圈通常使用的帧率,

2020-12-09 14:16:00 41102 14

原创 Android 渲染机制——绘制模型

Android 绘制模型由于 CPU 和 GPU 的设计不同,CPU 更擅长复杂逻辑控制,而 GPU 得益于大量 ALU 和并行结构设计,更擅长数学运算。在 Android 中,页面由各种基础元素(DisplayList)构成,渲染时需要进行大量浮点运算,这些工作更适合交给 GPU 来做。Android 为了提高视图渲染的性能,在 Android 3.0 中引入了硬件加速。这样 Android 中就存在了2种绘制模型了。Android 有两种绘制模型:基于软件的绘制模型硬件加速绘制模型基于

2020-12-09 14:01:29 25564

原创 Android 渲染机制——SurfaceFlinger

SurfaceFlingerAndroid 图形架构使用了生产者——消费者模型。Surface 表示缓冲队列中的生产方,图像流最常见的消耗方是 SurfaceFlinger,该系统服务接收来自于多个源的数据缓冲区,组合它们,并将它们发送给显示设备。Android 应用程序为了能够将自己的 UI 绘制在系统的帧缓冲区上,它们就必须要与 SurfaceFlinger 服务进行通信。SurfaceFlinger 服务运行在 Android 系统的 System 进程中,它负责管理 Android 系统的帧缓

2020-12-09 13:59:42 31484 1

原创 Android 渲染机制——Display List

Display ListAndroid 需要把 XML 布局文件转换成 GPU 能够识别并绘制的对象。这个操作是在 DisplayList 的帮助下完成的。DisplayList 持有所有将要交给 GPU 绘制到屏幕上的数据信息。Display List 是什么?Display List 是一个缓存绘制命令的 Buffer,Display List 的本质是一个缓冲区,它里面记录了即将要执行的绘制命令序列。Display List 是视图的基本绘制元素,包含元素原始属性(位置、尺寸、角度、透明度等

2020-12-09 13:58:27 27214 1

原创 Android 显示刷新机制、VSYNC和三重缓存机制

Android 显示刷新机制、VSYNC和三重缓存机制为了理解 APP 是如何进行渲染的,我们就必须了解手机硬件是如何工作的,也必须理解什么是 VSYNC。首先,我们需要了解2个相关概念:刷新率(Refresh Rate):代表了屏幕在一秒内刷新屏幕的次数,这取决于硬件的固定参数,例如 60Hz。帧率(Frame Rate):代表了 GPU 在一秒内绘制操作的帧数,例如 30fps,60fps。GPU 会获取图形数据进行渲染,然后硬件负责把渲染后的内容呈现到屏幕上,他们两者不停的进行协作。

2020-12-09 13:57:22 30274 5

原创 Flutter 顶部导航 AppBar 的实现

Flutter 实现 AppBar 功能我们知道,Android 中 Material 布局。只要是在 Material 中使用 AppBar 控件,即可实现 导航条的功能。AppBar 的属性想要使用 AppBar 这个 Widget 组件,首先要了解它的属性: AppBar({ Key key, this.leading,//导航栏左侧的 Widget,例如常见的 back 图标。 this.automaticallyImplyLeading = true,//如果

2020-12-09 13:53:25 23920 1

原创 Flutter 子页面回传参数

Flutter 子页面回传参数我们前文《Flutter 中的页面跳转及页面之间传参(路由跳转)》已经学习了如何在页面之间进行跳转,以及如何将参数传递给子页面。但是如果我们在子页面退出时,想让子页面传递参数给父页面,怎么做呢?回传参数使用 Navigator 的 pop 返回可返回上一级,并携带一个参数:Navigator.pop(context,'携带参数'); 父页面,可以通过.then()来接收参数:Navigator.push(context, 子页面对象).then((value)

2020-12-09 13:52:12 24450

原创 Android性能优化之——线程性能

Android性能优化之——线程性能Android 主线程与子线程Android 主线程负责 UI 的显示等工作,所以也成为 UI 线程,UI 线程如果阻塞,会导致界面卡顿、ANR 等问题。我们为了保证 UI 的流畅性,一些耗时的工作就不能在主线程中进行处理了,例如,网络操作、I/O 操作等。绝大多数,耗时操作都应该在子线程中处理。在 Android 中,使用子线程有多种方式,我们介绍一些常用的方式。Android 异步任务方式关于如何在 Android 中使用线程来创建并执行异步任务,详情请

2020-12-04 14:15:22 23772

原创 Android 中设置线程优先级的正确方式(2种方法)

Android 中设置线程优先级的正确方式(2种方法)在 Android 中,有两种常见的设置线程优先级的方式:第一种,使用 Thread 类实例的 setPriority 方法,来设置线程优先级。第二种,使用 Process 类的 setThreadPriority 方法,来设置线程优先级。这两种设置线程的优先级,一种是 Java 原生版本,另一种是 Android API 版本。这两种方式是不同的,Android 更推荐使用第二种方式。使用 Thread 类的 setPriority 方

2020-12-03 16:52:44 36262

原创 Android 在线程池中实现线程优先级的代码实现

Android 在线程池中实现线程优先级的代码实现在前文《Android 中设置线程优先级的正确方式(2种方法)》中,我们知道,设置线程优先级,最好使用 Android 推荐的 android.os.Process 类的 setThreadPriority 方法。该方法需要在需要在线程执行时调用,也就是需要在 run 方法里面调用。单个线程执行时,非常简单,那如果我们需要在线程池里设置现场优先级,又如何操作呢?这里我直接给出了一个模板示例,按照自己的需要修改参数即可:package com.bud

2020-12-03 11:36:15 25782 10

原创 Android 异步任务的6种实现方式详解

Android 异步任务的6种实现方式详解Android UI线程(主线程)有几个特点:只能在 UI 线程操作 UI 视图,不能在子线程中操作。不能在 UI 线程中进行耗时操作,否则会阻塞 UI 线程,引起 ANR、卡顿等问题。在 Android 开发中,我们通常将一些耗时的操作使用异步任务的方式进行处理。例如这样一种这种场景,子线程在后台执行一个异步任务,任务过程中,需要 UI 进程展示进度,这时我们就需要一个工具来实现这种需求。Android 系统为开发人员提供了一个异步任务类(Async

2020-12-03 11:16:50 41427 4

原创 Java 创建线程的三种方式总结

Java 创建线程的三种方式总结我们在开发中,为了提高程序的运行效率,经常会使用多线程的方式来实现并发操作。那么创建线程有几种方式呢?1、继承 Thread 类直接继承 Thread 即可实现多线程。Thread 本质上也是实现了 Runnable 接口,线程启动的唯一方法是通过 Thread 类的 start() 实例方法实现的。start() 方法调用时,系统才会真正创建一个新线程,并执行 run() 方法,它是一个native方法。 class MyThread extends Th

2020-12-03 11:13:19 25532

原创 Android 性能优化之——高性能使用图片全面总结

本文针对如何高性能的在 Android 中使用和处理图片进行了全面、多维度的分析。

2020-12-03 11:11:25 25666

原创 Flutter 中的页面跳转及页面之间传参(路由跳转)

Flutter 中的页面跳转及页面之间传参(路由跳转)大多数应用程序具有多个页面或视图,并且希望将用户从页面平滑过渡到另一个页面。Flutter 的路由和导航功能可帮助你管理应用中屏幕之间的命名和过渡。管理多个页面时有两个核心概念和类:Route 和 Navigator。 一个 Route 是一个屏幕或页面的抽象,Navigator 是管理 Route 的 Widget。Navigator 可以通过使 Route 入栈和出栈来实现页面之间的跳转。在 Android 开发中,Activity 相当于“

2020-12-03 11:07:23 26356 4

原创 Flutter 底部导航栏(Tab 页)的快速实现

Flutter 底部导航栏(Tab 页)的快速实现我们知道 Scaffold 实现了基本的 Material 布局。只要是在 Material 中定义了的单个界面显示的布局控件元素,都可以使用 Scaffold 来绘制。如果我们想实现底部 Tab 页切换的效果,应该如何做呢?bottomNavigationBarScaffold 的 bottomNavigationBar 属性是一个 BottomNavigationBar 类型的对象。BottomNavigationBar 是底部导航条,可以帮助

2020-12-03 11:06:27 28235 2

原创 Android 源码刷机版本号、支持设备对照表(AOSP )

Android 源码刷机版本号、支持设备对照表(AOSP )Android 官方地址:https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds**PS:更多精彩内容,请查看 --> 《AOSP 专栏》**PS:更多精彩内容,请查看 --> 《AOSP 专栏》**PS:更多精彩内容,请查看 --> 《AOSP 专栏》...

2020-12-03 11:02:17 25302

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除