自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Androidtalent的博客

努力成为一名talent,fighting

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

原创 Android 协程使用到原理详解

协程是什么协程是我们在 Android上进行异步编程的推荐解决方案之一,通过挂起和恢复让状态机状态流转实现把层层嵌套的回调代码变成像同步代码那样直观、简洁,协程的出现很好的避免了回调地狱的出现。所谓挂起,是指挂起协程,而非挂起线程,并且这个操作对线程是非阻塞式的。当线程执行到协程的 suspend 函数的时候,对于线程而言,线程会被回收或者再利用执行其他工作,就像主线程其实是会继续 UI 刷新工作。而对于协程本身,会根据 withContext 传入的 Dispatchers 所指定的线程去执行任务。

2022-04-02 11:06:29 5597

原创 探索 Jetpack Compose

前言在大前端概念快速发展下,出现了很多声明式 UI 写法的语言或框架,像前端的 react、iOS 的 Swift UI,还有 Google 的 Flutter,但很少会听到 Android 原生有什么革命性的声明式 UI 的技术或支持跨平台,这不,Google 推出了 Compose。下面,文中会对 Compose 做一些简要的剖析,以及带大家简单认识一下 KMM 的神秘面纱。Compose 是什么?发展路线2019 年 Google I/O 大会上公布的新的 UI 库 Compose,Jetp

2022-03-19 10:50:09 2748

原创 LeakCanary 源码深挖

一、前言LeakCanary 是 Android 端用于自动检测内存泄漏的开源库,使用这个工具可以方便的监控 Activity 和 Fragment 的内存泄漏情况, 并且提供了可视化界面, 可以在开发过程中很好的暴露和排查问题。基于 LeakCanary 1.5.4 源码。二、怎样使用?添加依赖dependencies { ...... implementation 'c...

2020-04-06 13:28:21 385

原创 代理设计模式在Android开发中的应用

1. 模式定义为其他对象提供一种代理以控制对这个对象的访问,分为静态代理和动态代理,代理模式也被称为委托模式,它是结构型设计模式的一种。在现实生活中我们用到类似代理模式的场景有很多,比如代理上网、打官司等。编程的思想其实有的时候和生活差不多。2. 代理模式的差异静态代理,在代码运行前就已经存在了代理类的class编译文件;而动态代理则是在代码运行时通过反射来动态地生成代理类的对象,并确定到底...

2020-01-18 23:14:08 290

原创 观察者设计模式在Android开发中的应用

1. 模式定义定义对象间一种一对多的依赖关系,每当一个对象改变状态时,则所有依赖于它的对象都会得到通知并被自动更新。2. Android 源码中的观察者模式应用在 Android 的源码中,我们接触比较多的应该是 RecyclerView 和 ListView 了,和其搭配使用的 Adapter,有 刷新列表的 notifyDataSetChanged() 方法,那么,该方法是怎样刷新列表...

2020-01-16 16:27:37 264

原创 策略设计模式在Android开发中的应用

1. 模式定义定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。策略设计模式使得算法可独立于使用它的客户而独立变化。2. 策略示例假如我们要做一款理财产品,有支付宝和微信两个支付渠道,两个渠道的金额算法不一样,这时再来了一个工行支付渠道又或者后面再来多几个渠道,而当每个渠道的金额算法不一样的时候,这时使用策略设计模式将各个渠道的金额算法封装起来,即可条理清晰,万一某个渠道的算法...

2020-01-15 15:28:28 164

原创 装饰设计模式在Android开发中的应用

1. 模式定义装饰设计模式也称包装设计模式,用来动态的扩展对象的功能,也是继承关系的的一种替代方案之一。在不使用的继承的方式下,采用装饰设计模式可以扩展一个对象的功能,可以使一个对象变得越来越强大。2. Android 源码的学习和思考相信用过 ListView 的朋友都知道,ListView 有自带的方法可以添加 header 和 footer,那么 ListView 是怎样做到的呢?L...

2020-01-14 20:26:44 279

原创 工厂设计模式在Android开发中的应用

1. 模式定义定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交由工厂去生成,有良好的封装性,既做到了解耦也保证了最少知识原则。工厂就是用来生成对象的,把对象的实例化和初始化封装起来。下面以数据存储为例介绍工厂设计模式的用法。2. 简单工厂模式定义数据操作接口(产品接口)public interface IOHandler { /*************save...

2020-01-11 23:28:39 239

原创 Android 音视频开发之自己动手编译 FFmpeg

前言ffmpeg 一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,对于音视频领域,有着极为重要的地位。作为一名 Android developer,如要涉足音视频领域,编译使用 ffmpeg 是不可少的进阶旅程。下面带你一步步实现 ffmpeg 的编译,在此之前,需要准备具有 Linux 环境的系统,如 Ubuntu、Mac,可以弄一个云服务器,也可以装个虚拟机,读者自行...

2019-12-04 17:04:06 279

原创 NDK 开发之使用 OpenCV 实现银行卡号识别

前言在日常的开发中,我们有时会遇到添加银行卡的需求,这时候,产品可能会让你仿一下支付宝之类的相机扫描识别银行卡号。很多时候,做这样的需求会去找找稳定的第三方,本文通过 OpenCV 结合识别的需求带你分析如何实现银行卡号的识别。由于作者技术有限,本文仅从如何做到识别的思路上介绍,文中例子不适用于实际开发,也不是所有银行卡都能识别,但希望读者可以在实现的思路上给予一些启发,以及更深入熟悉 Open...

2019-10-19 19:59:54 552 1

原创 NDK 开发之 OpenCV 使用实践

前言OpenCV 提供的视觉处理算法非常丰富,对图像、视频处理提供比较方便的处理方法,本文介绍使用 OpenCV 对图像进行处理,本文例子基于 Android Studio 3.4.1,OpenCV 3.4.6,gradle-5.1.1,build:gradle:3.4.1。若下载 Demo 编译不成功请升级 AS 或 将相关配置修改,项目源码在文末链接下载。1. 转灰度图主要使用 cvtC...

2019-10-07 15:33:09 312

原创 NDK 开发之使用 OpenCV 实现人脸识别

1. 前言本文讲述如何使用 OpenCV 进行简单的人脸识别开发,在此之前,需要配置好 OpenCV 和 NDK 环境。OpenCV 我使用的版本是:OpenCV 3.4.6,可在 这里 下载。NDK 使用的版本是 android-ndk-r16b,可在 这里 下载,对于因为使用其他版本导致的问题,本文不做叙述,因为使用其他版本,会遇到非常多的坑,敬请留意。2. NDK 配置在 SDK Ma...

2019-09-25 00:41:12 678

原创 NDK学习之路之 c++ 知识归纳

1.c++ 引用其实就是四驱模型的拷贝,引用其实是地址赋值,可以看成同一块内存的另外一个变量以两个变量值交换为例#include<stdio.h>void swap(int &number1, int &number2) { // &number 此处相当于同一块内存 取了另一个别名 int temp = number1; number1 = nu...

2019-08-25 10:33:52 318

原创 Jni 学习之路--Jni 小知识库

一、Java 和 native 层对照知识点1.返回值和参数类型对照表Java类型本地类型描述booleanjbooleanC/C++8位整型bytejbyteC/C++带符号的8位整型charjcharC/C++无符号的16位整型shortjshortC/C++带符号的16位整型intjintC/C++带符号的32位整型...

2019-08-19 21:59:41 204

原创 Jni 学习之路--入门尝鲜详细教程

一、入门准备鉴于方便入门尝鲜,先准备好 visual studio(我是用2013版),eclipse。visual studio 用于编写 c 代码,生成动态 dll 文件,eclipse 用于编写调用 native 的代码。二、编写代码第 1 步,在 eclipse 新建一个 Java 项目,新建一个类为 Simple1.java代码如下:public class Simple1 {...

2019-08-14 14:21:46 490

原创 可挖孔、可圆角、可带分割线的卡片 ViewGroup

使用implementation 'com.vegen.open:HoleCardView:+'其中 '+' 请填写版本号 Download 后的最新版本使用示例布局&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;android.support.constraint.ConstraintLayout xmlns:android="...

2019-01-03 21:17:24 634

原创 含覆盖模式、色块拼接组合模式的可渐变、可中间带文字列表的圆环进度条

使用implementation 'com.vegen.open:ProgressBar:+'其中 '+' 请填写版本号 Download 后的最新版本使用示例布局&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; xmlns:app=&quot;http://schemas.and...

2019-01-03 15:14:12 503

原创 RecyclerView方案打造的可见页为两页或三页的轮播控件

使用implementation 'com.vegen.open:VRecyclerViewBanner:1.0.0'其中 ‘+’ 请填写版本号我的Github项目地址Download 后的最新版本示例(kotlin)&amp;amp;lt;com.vegen.open.library.VRecyclerViewBanner android:id=&amp;quot;@+id/banner_type1&amp;quot;...

2018-11-10 10:45:21 1075

原创 EventBus 源码分析

本篇文章是EventBus的源码分析,以了解其实现的精髓`。EventBus是针对Android优化的发布-订阅事件总线,简化了Android组件间的通信。Github地址:EventBus一、注册 register 源码分析我们在使用 EventBus 的时候,一般通过EventBus.getDefault().register(this); 进行注册,注册的内部实现是...

2018-09-09 01:20:39 238

原创 动画实战:打造仿搜索引擎加载动画

前言 在上一篇 动画实战:打造炫酷的加载动画 中,我们利用属性动画打造了较为炫酷的加载动画,本篇文章还是以属性动画为利器,结合自定义 View/ViewGroup 打造仿某搜索引擎搜索中的动画效果。1.效果分析1.1 效果图1.2 效果分析 三个点,每次回到中间会交换颜色,属性动画控制运动2.实现分析 RelativeLayout...

2018-06-10 19:39:45 410

原创 动画实战:打造炫酷的加载动画

前言 很多时候,我们的页面需要网络请求完毕再根据数据加载 UI,而在此过程中,用户等待时,一般会有一个加载中的提示。本文结合自定义 View/ViewGroup 以及属性动画相关知识,讲述较为炫酷的动画效果的 LoadingView,并在细节上优化了代码。1.LoadingView 效果分析1.1 最终实现的效果图如下1.2 效果分析LoadingVi...

2018-06-10 15:36:00 1294

原创 自定义ViewGroup实战:结合ViewDragHelper实现列表拖拽

前言 ViewDragHelper 是一个用于编写自定义 ViewGroup 的工具类,它提供了许多有用的操作和状态跟踪,允许用户在其父 ViewGroup 中拖动和重新定位视图。 本文是结合 ViewDragHelper 和自定义 ViewGroup 相关知识来实现固定头部与列表的拖拽功能。 1.概述1.1 功能描述在自定义的 ViewGrou...

2018-06-09 22:41:12 1016

原创 自定义ViewGroup实战:一步步实现流式布局

流式布局在日常开发应用还是挺需要的,如搜索的记录一般我们就会做成流式布局,但是 Android 没有这样的布局,所以很多时候我们需要自定义 ViewGroup 来实现流式布局。本篇文章讲解的是流式布局的设计思想以及简单的实现,希望能给读者一点帮助。一、效果的实现分析首先我们看看最终实现的效果 对于上面的效果,实现步骤如下继承自 ViewGrouponMeasu...

2018-06-08 09:12:48 610

原创 自定义View实战四:圆形进度条

本文介绍自定义圆形进度条的实现,主要利用自定义 View 和动画相关知识。下面是效果图 实现步骤分析 准备好外层圆、内层圆、中间文字的画笔 测量 绘制 提供相关方法 准备好外层圆、内层圆、中间文字的画笔public ProgressBar(Context context, AttributeSet attrs, int defS...

2018-06-05 22:53:29 337

原创 自定义View实战三:实现变色TextView

一、概述 本文讲述如何自定义 TextView,使得 TextView 能切换两种颜色。最终实现效果如下图所示。二、实现步骤分析 继承自 TextView,做好初始化工作 实现一个文字两种颜色 实现不同朝向(左到右、右到左) 提供一些调用方法 结合 ViewPager 使用 三、具体实现 继承自 TextVie...

2018-05-28 14:06:46 560 2

原创 自定义View实战二:计步器的实现

一、概述 本文详细结合自定义 View 和 属性动画,讲述如何自定义一个圆弧计步器。二、实现步骤分析 确定自定义属性,编写attrs.xml 在自定义View中获取自定义属性,做好初始化工作 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 确保正方形 onDraw(Canvas can...

2018-05-27 15:06:44 439

原创 源码分析自定义ViewGroup onDraw方法无效

在上篇 自定义View实践一:打造仿系统TextView 中,MyTextView 继承的是 LinearLayout,也即是一个 ViewGroup,但当不指定背景颜色,且不在构造函数中添加 setWillNotDraw(false),就会显示不出文字。而当 TextView 继承 View 时,就算不指定背景颜色和不添加 setWillNotDraw(false),文字都是会显示的,为究...

2018-05-26 22:05:44 898

原创 自定义View实战一:打造仿系统TextView

自定义 View 是较为重要的一个技能,Android 的日常开发离不开自定义 View,下面以仿系统 TextView 进行对自定义 View 的学习与分析,本例只是初步实现 TextView 的基本功能,对于完整的 TextView 功能,还需一定程度上的源码分析。第一步:继承 LinearLayout,做好初始化工作初始化分析,需在构造方法中实现以下关键的操作: - 将...

2018-05-26 15:06:15 475

原创 Android 设计模式之代理模式

一、代理模式的介绍 定义:为其他的对象提供一种代理,控制这个对象的访问。 使用场景:当无法或者不想直接访问某个对象后者访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。 角色划分:目标接口、目标对象、代理对象 实现方式:静态代理、动态代理在我们的平时开发中,所使用的一些开源框架也有应用,如 XUt...

2018-04-15 17:33:19 265

原创 Builder设计模式之构建万能Dialog

一. Builder设计模式 定义 将一个复杂对象的构建与它的表示分离,使得不同的构建过程可以创建不同的显示,但其根本还是不变。使用场景 1、相同的方法,不同的执行顺序,产生不同的事件结果时; 2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时; 3、产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。UML图

2017-07-02 14:25:00 900

原创 计算机中丢失VCRUNTIME.dll

在腾讯云服务器中安装Apache,出现如下问题安装命令:”c:\Apache24\bin\httpd.exe” -k install -n apache 解决方法:在 http://www.apachelounge.com/download/ 下载vc_redist_x64/86.exe后安装就可以了

2017-06-19 22:41:39 1632

原创 Material Design系列--CollapsingToolbarLayout使用总结

前言 大三就要结束了,马上快要找实习了,这三年来,自己跌跌撞撞,走了很多弯路,很幸运遇到我的良师、伯乐–曾哥,一直鼓励我,引导我。在学校里,学到了很多,有过成功有过失败,有过迷茫也有过气馁,但是一步步走过来,发现自己还是个上进的人,勿忘初心,方得始终,希望未来会更好。故此,我想刷一波博客,整理三年来学到的东西(其实学Android是大二的时候开始),以回馈那些曾经帮助过我的人,以及回顾知识点。

2017-06-11 01:30:48 719

原创 Android 颜色使用总结

一. 颜色介绍 在平时coding中,我们常用的是ARGB8888和ARGB4444,而在所有的安卓设备屏幕上默认的模式都是RGB565。 模式 介绍 RGB565 屏幕默认模式(16位) ARGB8888 四通道高精度(32位) ARGB4444 四通道低精度(16位) Alpha8 仅有透明通道(8位)解析:字母表示通道类型,数值表示该类型用多少位二进制

2017-05-30 19:42:35 1066

原创 Android 加快编译时间

加速编译时间的方法挺简单,方法如下1、在所有module的build.gradle中android{}内加入如下代码android{...//-----加入的代码start------ tasks.whenTaskAdded { task -> if (task.name.contains("lint") //如果instant run不生效

2017-05-15 22:33:29 1862

原创 Android Studio恢复移除的Module

笔记:当我们移除了某个module,但是后来又想恢复这个module,可以这样恢复切换至project视图,打开settings.gradle 编辑settings.gradle,添加 include ‘:此处填module名’ 点击sycn gradle再次在Project Structure处添加依赖嗯,就是这么简单。

2017-05-15 00:20:15 1065

原创 Android 权限整理

权限汇总android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户android.permission.FLASHLIGHT 访问闪

2017-05-09 11:29:41 560

原创 Android 自己打造IOC注解框架

Android中IOC框架就是注入控件和布局或者说是设置点击监听,网上有很多成熟的注解框架例如xUtils,afinal,butterknife等等。你可能会问,既然已经有好的框架为何还要造轮子?因为,首先我是学习,学习框架的设计以及实现,其次是拓展,适合自己的轮子才是好轮子,所以我添加了判断网络状态的注解。此处特别感谢辉哥,他的技术分享是我的楷模。首先看看最终完成的效果public class M

2017-05-07 21:15:40 1174

原创 Android项目实践--《智慧校园》

作品介绍 本项目定位为主要面向全国高校学生人群 可供用户浏览校园内的资讯,如各类活动比赛公告,社团、机构、班级等团队发布的资讯,可以点赞、评论、分享资讯 方便用户记录生活、工作、学习上的大小事,好记性不如烂笔头,亦可设置任务提醒,任务进度管理。 团队的建设、管理,可通过APP安排任务、接任务,各类申请如其他机构申请该团队做某个任务,团队的资讯发布以及管理设计思路 设计APP分为五大模块,

2017-04-25 13:02:26 5278 8

原创 Android 环信EaseUI遇到的问题及解决方法

导入了EaseUI遇到的问题问题一 Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java

2017-04-25 00:01:12 4076

原创 EventBus3的简单使用

功能:可替代 Intent, Handler, BroadCast ,接口等传统方案github地址:https://github.com/greenrobot/EventBus添加依赖在module的build.gredle 文件中的dependencies标签中添加compile 'org.greenrobot:eventbus:3.

2017-02-16 16:32:00 823

Android群英传书本代码实例(全)

作者书本的实例全部完整代码

2016-07-18

空空如也

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

TA关注的人

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