自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蓝天白云梦的csdn博客

技能栈:Android、深度学习

原创 基于Transformers库的BERT模型:一个文本情感分类的实例解析
原力计划

简介本文来讲述BERT应用的一个例子,采用预训练好的BERT模型来进行演示。BERT的库来源于Transformers,这是一个由PyTorch编写的库,其集成了多个NLP领域SOTA的模型,比如bert、gpt-2、transformer xl等,并且可以自由选择已经预训练好的模型参数,我们可以基于这些参数进行进一步的训练调试。Part 1: 利用BERT基于特征的方式进行建模1、任务与数...

2020-04-08 16:54:34 1883 4

原创 一个基于PyTorch实现的Glove词向量的实例
原力计划

简介词向量技术,也称为词嵌入技术(word-embedding),是一种将高维稀疏的向量压缩到低维稠密向量的技术。常见于自然语言处理领域对单词的预处理过程,例如将单词的one-hot向量是高维稀疏的,不但占用大量空间,而且向量之间提供的信息很少。但经过词嵌入技术生成的向量,不但是低维的并且包含了很多词语间的语义、语法的信息。因此在NLP中,往往会先针对语料生成相应的词向量,然后再把词向量喂入具体...

2020-03-13 23:40:58 445

原创 Picasso源码完全解析——学习其优秀设计思想

前言图片加载框架Picasso相信大家都已经用过很多次了,对它们的使用方法也早就熟稔于心了,那么本文就Picasso的源码进行剖析,学习设计者的优秀的代码设计理念和方法。几个重要的类在源码解析开始之前,笔者认为有必要对Picasso的几个重要的类进行简单梳理,以便于后面遇到这些组件的时候可以马上知道它的作用是什么。1、OkHttp3DownloaderPicasso借助该类来下载图片,并...

2019-09-17 10:54:18 97

原创 Android源码探究:Android Native层消息机制完全解析

#前言前文详细分析了Java层的消息循环机制的工作原理,在分析MessageQueue的过程中,我们遇到了nativePollOnce()和nativeWake()方法的调用,下面我们就深入到Native层的消息机制来看看它背后的运作原理。#Native层的消息机制一、NativeMessageQueue的相关逻辑1、NativeMessageQueue的构建首先,我们来看看Java层的...

2019-05-20 17:07:31 766 1

原创 Android源码探究:Android Java层消息机制完全解析

#概述Android的消息机制对我们开发者来说应该是很熟悉的,其中最常见的用法就是利用Handler切换到主线程然后更新UI,消息机制的用法当然不仅仅局限于这个场景,但总的来说,消息机制解决了线程间和线程内的消息通信的问题。Android消息机制是指以Handler为上层接口,MessageQueue和Looper为底层支撑的工作过程。下面简单介绍一下这三个类:①Handler是我们经常接触的...

2019-05-20 17:05:23 177

原创 Android源码探究:Activity启动流程完全解析

概述本文主要内容是从源码角度进行Activity启动流程的分析。由于整个启动的过程非常长并且代码非常多,同时受限于笔者的水平,所以本文不会细致到解释每一行的代码的具体作用,只能抽取处关键部分的代码就主体流程进行分析,如有错误之处,希望批评指出。行文脉络由于本文会非常长,为了方便读者的理解,首先给出笔者的行文脉络。本文主要沿着:在应用程序1的Activity A内打开另一个应用程序2的Acti...

2019-05-07 11:37:41 422 2

原创 浅谈Android实现圆形头像效果的几种思路和方法

前言我们在开发的过程中,经常会遇到如下的需求:在界面上展示圆形的用户头像,其实这个需求很普遍并且实现难度也不大,网上也有很多相关的教程,那么本文主要来对几种实现思路和方法进行一次总结,方便以后需要时可以随时查阅。两个核心方法对于圆形头像的实现,实际上就是对长方形头像的Bitmap作某些处理,以达到变换成圆形头像的效果。我们自然而然地想到了用Canvas和Paint来处理,利用它们我们能实现很...

2019-04-24 18:54:33 481

原创 Java源码探究:ThreadLocal工作原理完全解析

#前言ThreadLocal是一个平时Android开发中并不常见的类,正因为少接触,所以对它的了解并不多。但实际上,它对我们常用的Handler通信机制起着重要的支撑作用。ThreadLocal,顾名思义,线程封闭的变量,也即该变量的作用范围是以当前线程为单位,别的线程不能访问该变量。ThreadLocal对外提供了get和set方法,用于提供线程独占的变量的访问途径。下面我们先从使用方法来了...

2019-04-16 11:20:26 207

原创 字符串相似度比较算法:Jaro–Winkler similarity的原理及实现

前言在前面的文章中,笔者有对编辑距离以及Levenshtein距离进行详细的说明,其实levenshtein距离是编辑距离的其中一种定义,本文所说的Jaro距离是编辑距离的另外一种定义,它也是对两个字符串的相似度进行衡量,以得出两字符串的相似程度。下面我们一起来学习这个算法的原理以及实现吧。标题算法定义下面先说说Jaro distance(又称Jaro similarity),这是由Matt...

2019-04-06 16:58:00 2959

原创 经典动态规划问题:最短编辑距离算法的原理及实现

编辑距离的定义编辑距离(Edit Distance)最常用的定义就是Levenstein距离,是由俄国科学家Vladimir Levenshtein于1965年提出的,所以编辑距离一般又称Levenshtein距离。它主要作用是测量两个字符串的差异化程度,表示字符串a至少要经过多少个操作才能转换为字符串b,这里的操作包括三种:增加、删除、替换。举个例子:(1)增加:对于字符串a:abc 和 ...

2019-04-04 00:27:33 981

原创 学习、探究Java设计模式——适配器模式

#前言在Android开发中,我们会经常遇到ListAdapter、RecyclerViewAdapter等带有Adapter字样的类,其实这里就用到了适配器模式,由于适配器模式的使用频率极高,因此这篇文章就来探究一下适配器模式及其应用场景。#定义适配器模式,将一个类的接口转换成客户端期望的另一个接口。使得两个没有关联的类能够在适配器的作用下进行合作。#UML类图适配器模式划分为两种形式...

2019-04-01 16:08:29 156

原创 学习、探究Java设计模式——单例模式

#前言单例模式是一个开发者耳熟能详的设计模式,在各种书籍或者文章都会见到这个名字,它的应用场景是:当一个对象的创建开销是十分昂贵的时候;当我们希望全局范围内只对已实例化的这个对象进行操作,而不希望重复实例化这一对象的时候,我们可以使用单例模式,以达到节省资源和协调系统运作的目的。#定义确保一个类只有一个实例,并在全局范围内只能通过单例类来获取这个实例。#类图根据定义,我们可以导出类图...

2019-03-29 17:52:25 65

原创 JNI 入门(一):从Hello World开始

#前言最近在学习JNI的相关知识,即Java Native Interface,它提供了若干API使得Java和C/C++的通信成为可能。我们知道,Java代码运行于Java虚拟机中,独立于某个平台,这也是Java的可移植性的优点。而C/C++代码运行于Windows或Linux平台。为了实现Java和其他代码的交互,JNI应运而生。最简单的就是,就是你在java中声明一个方法,但方法的具体实现...

2019-03-18 00:47:00 116

原创 Unity官方教程《Tanks》学习笔记(五)

本系列文章是根据官方视频教程而写下的学习笔记,原官方视频教程网址:https://unity3d.com/cn/learn/tutorials/s/tanks-tutorial 系列其他笔记传送门 Unity官方教程《Tanks》学习笔记(一) Unity官方教程《Tanks》学习笔记(二) Unity官方教程《Tanks》学习笔记(三) Unity官方教程《Tan...

2018-02-09 16:24:20 1199

原创 Unity官方教程《Tanks》学习笔记(四)

本系列文章是根据官方视频教程而写下的学习笔记,原官方视频教程网址:https://unity3d.com/cn/learn/tutorials/s/tanks-tutorial 系列其他笔记传送门 Unity官方教程《Tanks》学习笔记(一) Unity官方教程《Tanks》学习笔记(二) Unity官方教程《Tanks》学习笔记(三) Unity官方教程《Tan...

2018-02-09 16:23:57 1096

原创 Unity官方教程《Tanks》学习笔记(三)

本系列文章是根据官方视频教程而写下的学习笔记,原官方视频教程网址:https://unity3d.com/cn/learn/tutorials/s/tanks-tutorial 系列其他笔记传送门 Unity官方教程《Tanks》学习笔记(一) Unity官方教程《Tanks》学习笔记(二) Unity官方教程《Tanks》学习笔记(四) Unity官方教程《Tan...

2018-02-09 16:23:25 3681 1

原创 Unity官方教程《Tanks》学习笔记(二)

本系列文章是根据官方视频教程而写下的学习笔记,原官方视频教程网址:https://unity3d.com/cn/learn/tutorials/s/tanks-tutorial 系列其他笔记传送门 Unity官方教程《Tanks》学习笔记(一) Unity官方教程《Tanks》学习笔记(三) Unity官方教程《Tanks》学习笔记(四) Unity官方教程《Tan...

2018-02-09 16:22:54 1679 1

原创 Unity官方教程《Tanks》学习笔记(一)

本系列文章是根据官方视频教程而写下的学习笔记,原官方视频教程网址:https://unity3d.com/cn/learn/tutorials/s/tanks-tutorial 系列其他笔记传送门 Unity官方教程《Tanks》学习笔记(二) Unity官方教程《Tanks》学习笔记(三) Unity官方教程《Tanks》学习笔记(四) Unity官方教程《Tan...

2018-02-09 16:22:03 2857

原创 利用ViewPager实现3D画廊效果及其图片加载优化

前言对于ViewPager,相信大家都已经很熟悉了,在各种切换场景比如Fragment切换、选项卡的切换或者顶部轮播图片等都可以用ViewPager去实现。那么本篇文章带来ViewPager的一种实现效果:3D画廊。

2017-04-13 15:58:40 4443 1

原创 OkHttp3使用解析:实现下载进度的监听及其原理简析

前言本篇文章主要介绍如何利用OkHttp3实现下载进度的监听。其实下载进度的监听,在OkHttp3的官方源码中已经有了相应的实现(传送门),我们可以参考它们的实现方法,并谈谈它们的实现原理,以便我们更好地理解。

2017-02-21 18:39:34 7531 9

原创 RecyclerView进阶:使用ItemTouchHelper实现拖拽和侧滑删除

有时候我们可能需要实现侧滑删除的功能,比如知乎首页的侧滑删除,又或者长按Item进行拖动与其他Item进行位置的交换,但RecyclerView没有提供现成的API供我们操作,所幸SDK提供了ItemTouchHelper这样一个工具类帮助我们快速实现以上功能。不多说别的,我们来介绍一下ItemTouchHelp的用法及自定义动画效果

2017-01-31 15:04:36 28438 25

原创 Android 如何保存与恢复自定义View的状态?

在上一篇文章Android状态保存与恢复流程 完全解析,笔者详细地介绍了Activity、Fragment、View等的状态保存与恢复流程,相信大家对状态的保存与恢复都有了一定熟悉。而这篇文章就着重介绍自定义View该怎样保存与恢复状态,因为每个自定义View都是不同的情况,所以我们一般需要重写View的onSaveInstanceState()或onRestoreInstanceState()

2017-01-20 18:40:15 4941 4

原创 Android状态保存与恢复流程 完全解析

前言很久没写过文章了,最近一段时间忙着各种各样的事情,难得寒假有时间便把最近所学的整理及记录下来与大家分享。本篇文章是关于Android的状态保存与恢复的源码分析。 对于一个Activity或者View来说,状态的保存与恢复是必不可少的,最常见的一种情况是切换屏幕方向了,如果由竖屏切换为横屏,那么必定会经历Activity的摧毁与重建,那么它所对应的View视图也会被摧毁和重建,如果此时没有对Vi

2017-01-18 14:08:28 3606

原创 实现折叠式Toolbar:CollapsingToolbarLayout 使用完全解析

简介在各种不同的应用中,大家可能会经常见到这样一个效果:Toolbar是透明的,有着一个背景图片以及大标题,随着页面向上滑动,其标题逐渐缩放到Toolbar上,而背景图片则在滑动到一定程度后变成了Toolbar的颜色,这种效果也即是折叠式效果。其实这种效果在GitHub上面已经有很多开源库实现了,但是Google在其推出的Design Library库中也给出了一个这种控件,让我们很方便地实现了这种

2016-10-20 12:29:51 25471 4

原创 Android 实现带指示器的自动轮播式ViewPager

前言最近在做项目的时候,有个需求就是实现自动轮播式的ViewPager,最直观的例子就是知乎日报顶部的ViewPager,它内部有着好几个子view,每个一段时间便自动滑动到下一个item view,而底部的指示器也随之跟着改变。抱着学习和分享的目的,笔者把轮播式ViewPager写成了一个独立的控件,以方便以后的使用。

2016-10-04 16:09:28 7313 7

原创 EventBus 3.0进阶:源码及其设计模式 完全解析

前言在上一篇文章:EventBus 3.0初探: 入门使用及其使用 完全解析中,笔者为大家介绍了EventBus 3.0的用法,相信大家对其的使用也比较熟悉了。我们学习使用一个开源库,不但要知道其怎么使用,也要对其的实现原理有一定的熟悉,学习并借鉴它优秀的实现思想,这样对我们以后的开发又或者是自己的开源项目都有很大的意义。那么今天的文章,就是EventBus 3.0的进阶,剖析它的实现原理以及对其使

2016-09-14 00:31:48 2595 1

原创 EventBus 3.0初探: 入门使用及其使用 完全解析

前言EventBus是greenrobot在Android平台发布的一款以订阅——发布模式为核心的开源库。EventBus翻译过来是事件总线的意思,可以这样理解:一个个事件(event)发送到总线上,然后EventBus根据已注册的订阅者(subscribers)来匹配相应的事件,进而把事件传递给订阅者,这也是观察者模式的一个最佳实践。那么EventBus可以用到什么地方呢?我们平时开发的

2016-09-08 21:22:48 1985

原创 学习、探究Java设计模式——观察者模式

前言观察者模式是面向对象编程中较为常用的一种设计模式,观察者模式又称为订阅-发布模式,特别是适用于GUI图形界面中,比如Android的View中就大量使用了此模式。那么观察者模式到底是什么以及我们应该怎么使用它呢?相信通过本文的学习,你们会有一个更为清晰的答案。定义 观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。由以上的定义,我们可以知道

2016-09-06 22:01:36 1559 4

原创 Android 自定义View:教你轻松实现内存清理加速球的效果

前言用过猎豹清理大师或者相类似的安全软件,大家都知道它们都会有一个功能,那就是内存清理,而展现的形式是通过一个圆形的小球来显示内存大小,通过百分比数字以及进度条的形式来显示清理的进度。本文将对该效果的实现过程进行详细讲述,但不涉及内存清理的实现。预览我们先来看看最终实现的效果是怎样的(gif效果有点差): 从上面的图片,我们可以看出: ①当加速球View显示的时候,进度条以及百分比数字会从0

2016-08-26 15:42:37 2457 2

原创 Android 自定义Toast:轻松实现深度可定制化的Toast

前言用过系统自带的Toast的都知道,android自带的吐司比较难看,而且样式单一,最重要的是不能自由选择动画,这样的吐司很难用在一个精美的应用上,因此,我们来自行实现一个自定义的Toast:XToast,来取代系统自带的Toast。当然了,以下实现的自定义Toast是与系统Toast有区别的,下面会提到。使用方式&预览我们来看看怎么使用XToast,通过提供的一系列的set方法,可自行设置XTo

2016-08-19 22:25:33 1770 3

原创 学习、探究Java设计模式——装饰者模式

定义装饰者模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。设计原则要使用装饰者模式,需要满足以下设计原则: 1、多用组合,少用继承 2、开放-关闭原则:类应该对拓展开放,对修改关闭UML类图我们先来看看装饰者模式的类图,再来详细讲述: 由上自下: 1、Component是基类。通常是

2016-08-03 22:52:44 13923 11

原创 Retrofit2 初探:入门及其使用 完全解析

前言相信大家对Retrofit一定不陌生,或多或少都听过它的名字,它是一个最近很流行也很好用的网络请求库,它对okHttp进行了封装,加上利用了Java注解等特性,使得它能适应于灵活多变的网络请求情景。那么接下来我们一起学习怎样使用Retrofit2。官网及相关文件在正式使用Retrofit2之前,我们要先准备好相应的文件: Retrofit2 GitHub地址 Retrofit2 官网地址

2016-08-02 14:07:24 6393 3

原创 自定义控件:实现半圆滚动菜单效果

前言本自定义控件参考自鸿洋大神的自定义控件(原文地址),基于原来的控件效果进行修改,着重实现了以下效果:位置自动修正以及滑动结束的回调。我们先来看看效果图: 上面的图片是一个ImageView,与控件无关,是为了验证回调功能。接着是位置自动修正: 位置自动修正的意思是说,每个item view经过滑动后,停留的位置不是随意的,而是固定在某个区域之内,就如每个item view装在一个个格子里面。

2016-07-29 21:49:14 3956 2

原创 Android View 深度分析requestLayout、invalidate与postInvalidate

前言前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看前几篇文章,以便能更容易理解这篇文章的内容。

2016-06-04 10:03:59 45686 25

原创 Android View 绘制流程(Draw) 完全解析

前言前几篇文章,笔者分别讲述了DecorView,measure,layout流程等,接下来将详细分析三大工作流程的最后一个流程——绘制流程。测量流程决定了View的大小,布局流程决定了View的位置,那么绘制流程将决定View的样子,一个View该显示什么由绘制流程完成。

2016-06-02 22:49:51 7508 3

原创 Android View 布局流程(Layout)完全解析

前言上一篇文章,笔者详细讲述了View三大工作流程的第一个,Measure流程,如果对测量流程还不熟悉的读者可以参考一下上一篇文章。测量流程主要是对View树进行测量,获取每一个View的测量宽高,那么有了测量宽高,就是要进行布局流程了,布局流程相对测量流程来说简单许多。那么我们开始对layout流程进行详细的解析。ViewGroup的布局流程上一篇文章提到,三大流程始于ViewRootImpl#p

2016-05-28 13:31:34 5486 2

原创 Android View 测量流程(Measure)完全解析

本篇文章主要内容是:详细讲述View的测量(Measure)流程,主要以源码的形式呈现

2016-05-24 22:15:21 15822 10

原创 Android View源码解读:浅谈DecorView与ViewRootImpl

前言对于Android开发者来说,View无疑是开发中经常接触的,包括它的事件分发机制、测量、布局、绘制流程等,如果要自定义一个View,那么应该对以上流程有所了解、研究。本系列文章将会为大家带来View的工作流程详细解析。在深入接触View的测量、布局、绘制这三个流程之前,我们从Activity入手,看看从Activity创建后到View的正式工作之前,所要经历的步骤。以下源码均取自Android

2016-05-22 21:18:24 10978 8

原创 教你轻松实现Material Design风格的知乎主页(详解多种控件的综合使用)

本文讲主要来说说Toolbar、RecyclerView、CardView、DrawerLayout、以及SwiperefreshLayout的综合使用,其中Toolbar和RecyclerView在前几篇博客已经详细讲述其用法了,有兴趣的可以去看看。现在利用这几个控件实现Material Design风格的知乎主页(Android v3.3版 知乎)

2016-05-17 01:25:38 8175

原创 揭开RecyclerView的神秘面纱(三):操作数据及添加分割线

讲述RecyclerView的操作数据以及添加分割线

2016-05-12 16:43:35 1395

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