Android进阶篇
文章平均质量分 93
胡小明同学
努力成为talent
展开
-
Android 协程使用到原理详解
协程是什么协程是我们在 Android上进行异步编程的推荐解决方案之一,通过挂起和恢复让状态机状态流转实现把层层嵌套的回调代码变成像同步代码那样直观、简洁,协程的出现很好的避免了回调地狱的出现。所谓挂起,是指挂起协程,而非挂起线程,并且这个操作对线程是非阻塞式的。当线程执行到协程的 suspend 函数的时候,对于线程而言,线程会被回收或者再利用执行其他工作,就像主线程其实是会继续 UI 刷新工作。而对于协程本身,会根据 withContext 传入的 Dispatchers 所指定的线程去执行任务。原创 2022-04-02 11:06:29 · 5717 阅读 · 0 评论 -
代理设计模式在Android开发中的应用
1. 模式定义为其他对象提供一种代理以控制对这个对象的访问,分为静态代理和动态代理,代理模式也被称为委托模式,它是结构型设计模式的一种。在现实生活中我们用到类似代理模式的场景有很多,比如代理上网、打官司等。编程的思想其实有的时候和生活差不多。2. 代理模式的差异静态代理,在代码运行前就已经存在了代理类的class编译文件;而动态代理则是在代码运行时通过反射来动态地生成代理类的对象,并确定到底...原创 2020-01-18 23:14:08 · 310 阅读 · 0 评论 -
观察者设计模式在Android开发中的应用
1. 模式定义定义对象间一种一对多的依赖关系,每当一个对象改变状态时,则所有依赖于它的对象都会得到通知并被自动更新。2. Android 源码中的观察者模式应用在 Android 的源码中,我们接触比较多的应该是 RecyclerView 和 ListView 了,和其搭配使用的 Adapter,有 刷新列表的 notifyDataSetChanged() 方法,那么,该方法是怎样刷新列表...原创 2020-01-16 16:27:37 · 276 阅读 · 0 评论 -
策略设计模式在Android开发中的应用
1. 模式定义定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。策略设计模式使得算法可独立于使用它的客户而独立变化。2. 策略示例假如我们要做一款理财产品,有支付宝和微信两个支付渠道,两个渠道的金额算法不一样,这时再来了一个工行支付渠道又或者后面再来多几个渠道,而当每个渠道的金额算法不一样的时候,这时使用策略设计模式将各个渠道的金额算法封装起来,即可条理清晰,万一某个渠道的算法...原创 2020-01-15 15:28:28 · 201 阅读 · 0 评论 -
装饰设计模式在Android开发中的应用
1. 模式定义装饰设计模式也称包装设计模式,用来动态的扩展对象的功能,也是继承关系的的一种替代方案之一。在不使用的继承的方式下,采用装饰设计模式可以扩展一个对象的功能,可以使一个对象变得越来越强大。2. Android 源码的学习和思考相信用过 ListView 的朋友都知道,ListView 有自带的方法可以添加 header 和 footer,那么 ListView 是怎样做到的呢?L...原创 2020-01-14 20:26:44 · 297 阅读 · 0 评论 -
工厂设计模式在Android开发中的应用
1. 模式定义定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交由工厂去生成,有良好的封装性,既做到了解耦也保证了最少知识原则。工厂就是用来生成对象的,把对象的实例化和初始化封装起来。下面以数据存储为例介绍工厂设计模式的用法。2. 简单工厂模式定义数据操作接口(产品接口)public interface IOHandler { /*************save...原创 2020-01-11 23:28:39 · 258 阅读 · 0 评论 -
Android 音视频开发之自己动手编译 FFmpeg
前言ffmpeg 一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,对于音视频领域,有着极为重要的地位。作为一名 Android developer,如要涉足音视频领域,编译使用 ffmpeg 是不可少的进阶旅程。下面带你一步步实现 ffmpeg 的编译,在此之前,需要准备具有 Linux 环境的系统,如 Ubuntu、Mac,可以弄一个云服务器,也可以装个虚拟机,读者自行...原创 2019-12-04 17:04:06 · 297 阅读 · 0 评论 -
NDK 开发之使用 OpenCV 实现银行卡号识别
前言在日常的开发中,我们有时会遇到添加银行卡的需求,这时候,产品可能会让你仿一下支付宝之类的相机扫描识别银行卡号。很多时候,做这样的需求会去找找稳定的第三方,本文通过 OpenCV 结合识别的需求带你分析如何实现银行卡号的识别。由于作者技术有限,本文仅从如何做到识别的思路上介绍,文中例子不适用于实际开发,也不是所有银行卡都能识别,但希望读者可以在实现的思路上给予一些启发,以及更深入熟悉 Open...原创 2019-10-19 19:59:54 · 585 阅读 · 1 评论 -
自定义ViewGroup实战:一步步实现流式布局
流式布局在日常开发应用还是挺需要的,如搜索的记录一般我们就会做成流式布局,但是 Android 没有这样的布局,所以很多时候我们需要自定义 ViewGroup 来实现流式布局。本篇文章讲解的是流式布局的设计思想以及简单的实现,希望能给读者一点帮助。一、效果的实现分析首先我们看看最终实现的效果 对于上面的效果,实现步骤如下继承自 ViewGrouponMeasu...原创 2018-06-08 09:12:48 · 629 阅读 · 0 评论 -
自定义ViewGroup实战:结合ViewDragHelper实现列表拖拽
前言 ViewDragHelper 是一个用于编写自定义 ViewGroup 的工具类,它提供了许多有用的操作和状态跟踪,允许用户在其父 ViewGroup 中拖动和重新定位视图。 本文是结合 ViewDragHelper 和自定义 ViewGroup 相关知识来实现固定头部与列表的拖拽功能。 1.概述1.1 功能描述在自定义的 ViewGrou...原创 2018-06-09 22:41:12 · 1067 阅读 · 0 评论 -
动画实战:打造炫酷的加载动画
前言 很多时候,我们的页面需要网络请求完毕再根据数据加载 UI,而在此过程中,用户等待时,一般会有一个加载中的提示。本文结合自定义 View/ViewGroup 以及属性动画相关知识,讲述较为炫酷的动画效果的 LoadingView,并在细节上优化了代码。1.LoadingView 效果分析1.1 最终实现的效果图如下1.2 效果分析LoadingVi...原创 2018-06-10 15:36:00 · 1328 阅读 · 0 评论 -
动画实战:打造仿搜索引擎加载动画
前言 在上一篇 动画实战:打造炫酷的加载动画 中,我们利用属性动画打造了较为炫酷的加载动画,本篇文章还是以属性动画为利器,结合自定义 View/ViewGroup 打造仿某搜索引擎搜索中的动画效果。1.效果分析1.1 效果图1.2 效果分析 三个点,每次回到中间会交换颜色,属性动画控制运动2.实现分析 RelativeLayout...原创 2018-06-10 19:39:45 · 442 阅读 · 0 评论 -
EventBus 源码分析
本篇文章是EventBus的源码分析,以了解其实现的精髓`。EventBus是针对Android优化的发布-订阅事件总线,简化了Android组件间的通信。Github地址:EventBus一、注册 register 源码分析我们在使用 EventBus 的时候,一般通过EventBus.getDefault().register(this); 进行注册,注册的内部实现是...原创 2018-09-09 01:20:39 · 270 阅读 · 0 评论 -
RecyclerView方案打造的可见页为两页或三页的轮播控件
使用implementation 'com.vegen.open:VRecyclerViewBanner:1.0.0'其中 ‘+’ 请填写版本号我的Github项目地址Download 后的最新版本示例(kotlin)<com.vegen.open.library.VRecyclerViewBanner android:id="@+id/banner_type1"...原创 2018-11-10 10:45:21 · 1111 阅读 · 0 评论 -
含覆盖模式、色块拼接组合模式的可渐变、可中间带文字列表的圆环进度条
使用implementation 'com.vegen.open:ProgressBar:+'其中 '+' 请填写版本号 Download 后的最新版本使用示例布局<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.and...原创 2019-01-03 15:14:12 · 523 阅读 · 0 评论 -
可挖孔、可圆角、可带分割线的卡片 ViewGroup
使用implementation 'com.vegen.open:HoleCardView:+'其中 '+' 请填写版本号 Download 后的最新版本使用示例布局<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="...原创 2019-01-03 21:17:24 · 665 阅读 · 0 评论 -
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 · 523 阅读 · 0 评论 -
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 · 217 阅读 · 0 评论 -
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 · 345 阅读 · 0 评论 -
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 · 706 阅读 · 0 评论 -
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 · 343 阅读 · 0 评论 -
自定义View实战四:圆形进度条
本文介绍自定义圆形进度条的实现,主要利用自定义 View 和动画相关知识。下面是效果图 实现步骤分析 准备好外层圆、内层圆、中间文字的画笔 测量 绘制 提供相关方法 准备好外层圆、内层圆、中间文字的画笔public ProgressBar(Context context, AttributeSet attrs, int defS...原创 2018-06-05 22:53:29 · 361 阅读 · 0 评论 -
自定义View实战三:实现变色TextView
一、概述 本文讲述如何自定义 TextView,使得 TextView 能切换两种颜色。最终实现效果如下图所示。二、实现步骤分析 继承自 TextView,做好初始化工作 实现一个文字两种颜色 实现不同朝向(左到右、右到左) 提供一些调用方法 结合 ViewPager 使用 三、具体实现 继承自 TextVie...原创 2018-05-28 14:06:46 · 599 阅读 · 2 评论 -
自定义View实战二:计步器的实现
一、概述 本文详细结合自定义 View 和 属性动画,讲述如何自定义一个圆弧计步器。二、实现步骤分析 确定自定义属性,编写attrs.xml 在自定义View中获取自定义属性,做好初始化工作 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 确保正方形 onDraw(Canvas can...原创 2018-05-27 15:06:44 · 460 阅读 · 0 评论 -
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 · 848 阅读 · 0 评论 -
手把手教你TabLayout、ViewPager、Fragment实现顶部导航
第一步:编写主布局文件xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app原创 2016-08-10 18:28:55 · 1208 阅读 · 1 评论 -
实现自定义属性的三种方法
实现自定义属性主要有三种方法第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值。(1)在xml文件中设置属性值[html] view plaincopycom.example.activity.IconTextView an原创 2016-08-04 14:12:58 · 2211 阅读 · 0 评论 -
源码分析自定义ViewGroup onDraw方法无效
在上篇 自定义View实践一:打造仿系统TextView 中,MyTextView 继承的是 LinearLayout,也即是一个 ViewGroup,但当不指定背景颜色,且不在构造函数中添加 setWillNotDraw(false),就会显示不出文字。而当 TextView 继承 View 时,就算不指定背景颜色和不添加 setWillNotDraw(false),文字都是会显示的,为究...原创 2018-05-26 22:05:44 · 923 阅读 · 0 评论 -
自定义View实战一:打造仿系统TextView
自定义 View 是较为重要的一个技能,Android 的日常开发离不开自定义 View,下面以仿系统 TextView 进行对自定义 View 的学习与分析,本例只是初步实现 TextView 的基本功能,对于完整的 TextView 功能,还需一定程度上的源码分析。第一步:继承 LinearLayout,做好初始化工作初始化分析,需在构造方法中实现以下关键的操作: - 将...原创 2018-05-26 15:06:15 · 496 阅读 · 0 评论 -
Builder设计模式之构建万能Dialog
一. Builder设计模式 定义 将一个复杂对象的构建与它的表示分离,使得不同的构建过程可以创建不同的显示,但其根本还是不变。使用场景 1、相同的方法,不同的执行顺序,产生不同的事件结果时; 2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时; 3、产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。UML图原创 2017-07-02 14:25:00 · 926 阅读 · 0 评论 -
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 · 4108 阅读 · 0 评论 -
Android 自己打造IOC注解框架
Android中IOC框架就是注入控件和布局或者说是设置点击监听,网上有很多成熟的注解框架例如xUtils,afinal,butterknife等等。你可能会问,既然已经有好的框架为何还要造轮子?因为,首先我是学习,学习框架的设计以及实现,其次是拓展,适合自己的轮子才是好轮子,所以我添加了判断网络状态的注解。此处特别感谢辉哥,他的技术分享是我的楷模。首先看看最终完成的效果public class M原创 2017-05-07 21:15:40 · 1203 阅读 · 0 评论 -
Android动画归纳整理
Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。 下面就讲一下Tweene Animations。 主要类: Animation 动画AlphaAnimation原创 2016-07-15 21:14:55 · 440 阅读 · 0 评论