开源算法集合
本文主要是收集一些大的公司开源的算法项目,以方便我们开发使用。包括:guetzli(图像算法)、brotli(压缩算法)、face_classification(人脸分类以及情感算法)。
Google【guetzli】
源码地址:guetzli
简介:Google 又开源了,这次开源了一款图像算法工具 Guetzli。Guetzli,在瑞士德语中是“cookie(曲奇)”的意思,是一个针对数码图像和网页图像的 JPEG 编码器,能够通过产生更小的 JPEG 文件来达到更快的在线体验,并且同时保持与当前浏览器,图像处理应用和 JPEG 标准的兼容性。Google 称 Guetzli 创建高质量的 JPEG 图像文件的大小比当前的压缩方法要再小 35%。
简介来源:开源中国:Google 开源图像算法工具 Guetzli,高质量压缩图片
【brotli】
源码地址:brotli
简介:Zotfli压缩算法在默认设置下的输出比zlib的最大压缩比输出还要小3-8%。PNG优化器、Web内容预处理等许多压缩方案中都集成了该算法。基于该算法的应用情况,结合其它现代压缩需求,谷歌 ...
常用UI框架汇总
本章主要是对常用的UI框架进行整理,帮助大家更方便的查找资源。主要包括:ViewPager、RecyclerView、Toast、Notification、CoordinatorLayout、Animation、界面切换、日历、高斯模糊、菜单、图片选择器、切换主题等。
UIViewPager
YViewPagerDemoYViewPagerDemo
InfiniteCycleViewPagerInfiniteCycleViewPager
InfiniteCycleViewPagerXamarinInfiniteCycleViewPagerXamarin
ViewPagerCardsViewPagerCards
ViewpagerTransitionViewpagerTransition
CardStackView
CardStackViewCardStackView
FlippableStackViewFlippableStackView
CardStackViewCardStackView
R ...
Android 常用框架集合
本章主要是对一下常用的框架进行整理,包括框架的源码地址以及一些比较详细的博客讲解,帮助大家更方便的查找资源。
网络1.android-async-http:一个比较老的网络框架项目,虽然已经很少使用了,但是可以学习一下里面的写作方法。
源码地址:android-async-http
详解:
官方网址
快速Android开发系列网络篇之Android-Async-Http
android-async-http框架库使用基础
2.retrofit:retrofit是由square开源组织开源的一款非常流行的网络请求框架,现在使用已经非常广泛。
源码地址:retrofit
详解:
官方详解
Retrofit用法详解
Retrofit分析-漂亮的解耦套路
Retrofit 2.0:有史以来最大的改进
Android 手把手教你使用Retrofit2
3.okhttp:okhttp也是由square开源组织开源的一款网络底层封装库,上面介绍的Retrofit也是基于此库进行的二次封装。
源码地址:okhttp
详解:
官方详解
如何更高效地使用 OkHttp
OkHttp:Ja ...
墨香带你学Launcher之(七)- 小部件的加载、添加以及大小调节
上一章墨香带你学Launcher之(六)- 拖拽我们介绍了Launcher的拖拽过程,涉及到的范围比较广,包括图标的拖拽,桌面上CellLayout的拖拽,小部件的拖拽,以及跨不同部件的拖拽,设计思想非常巧妙,不过整个流程相对也比较好掌握,只要跟着上一章的流程自己多跟踪几遍基本就熟悉了。按照计划本章我们继续学习Launcher的Widget的加载、添加以及Widget的大小调节。
Widget的数据加载其实我们在第二章墨香带你学Launcher之(二)-数据加载流程介绍过Widget数据的加载,相对只是简单的做了介绍,下面我们稍微讲的详细点。
我们知道Widget的数据加载开始在LauncherModel中的updateWidgetsModel方法中,我们看下代码:
12345678void updateWidgetsModel(boolean refresh) { PackageManager packageManager = mApp.getContext().getPackageManager(); final ArrayList<Object ...
墨香带你学Launcher之(六)- 拖拽
上一章墨香带你学Launcher之(五)- Workspace滑动介绍了workspace的形成以及滑动过程处理,本章我们介绍桌面图标的拖拽过程,这个拖拽过程设计非常巧妙,设计的东西很多,所以我尽量详细讲解。
由于十一回来一直上火,到最近才渐好,工作相对也较忙,所以一直拖到现在才开始写这篇文章,在留言里也看到很多人关注我的博客文章,非常感激,也有朋友一直期待,所以在此说声抱歉,来的有点晚,所以趁着今天有空补上这篇文章。
对于双层桌面,拖拽主要有几个事件,一个是从二级菜单的所有应用界面中的图标(或者小插件)拖拽到桌面上,另外一个是在桌面上或者文件夹中的图标拖拽到别的桌面或者文件夹中,还有就是拖拽桌面上的CellLayout进行排序,这个内容在前一章已经讲过了,想看的可以看前一章,剩下的这两种我们分开来讲。拖拽过程中还有些名词,比如DropTarget、DragObject、DragView、DragSource等,我会在讲解过程中在解释。下面我们开始看第一个过程:
桌面上的图标拖拽
我们知道图标拖拽的触发条件是长按事件,因此我们要找到长按事件的过程,长按事件的代码在Launche ...
墨香带你学Launcher之(五)- Workspace滑动
上一章墨香带你学Launcher之(四)- 应用安装、更新、卸载时的数据加载介绍了应用的安装、更新、卸载时的数据加载和图标绘制流程,本章我们来介绍承载图标、小部件等的Workspace的布局和滑动操作。
在第一章墨香带你学Launcher之(一)- 概述中我们讲过Workspace包含多个CellLayout,每个CellLayout是一个页面,多个CellLayout可以通过滑动切换,这样就可以找到不同的图标,那么Workspace中的CellLayout是如何布局到Workspace中的,Workspace中滑动又是如何处理的,我们按照这两个步骤进行分析。
1.Workspace布局:
首先我们先看一下Workspace的继承逻辑:
Workspace继承PagedView,而PagedView又继承ViewGroup,由名字我们可以猜出,PagedView是分页的自定义View,谈到自定义View,我们应该比较熟悉自定义View的原理,此处不再详细讲解,不熟的可以看看我的这篇博客中的详解Android知识梳理。我们直接看Workspace是如何布局的,其实,worksp ...
自定义View之—渐变进度条
最近项目中用到渐变圆环进度条,自己也写了一下,用到一些知识,以前没有用过,使用过程中有一些问题,在此做一下笔记。
渐变颜色其实用到的是颜色数组,然后根据数组计算来的,当然计算是Android系统进行的,不需要我们手动计算,我们只需要设置颜色数组和颜色值对应位置即可。画圆形渐变用到一个属性:SweepGradient,他的父类是一个Shader,
由官方文档看到他有两个构造函数:
123SweepGradient(float cx, float cy, int color0, int color1)SweepGradient(float cx, float cy, int colors[], float positions[])
cx:要画的圆环的中心点x坐标;
cy:要画的圆环的中心点y坐标;
color0:起始颜色值;
color1:结束颜色值;
colors[]:颜色数组;
positions[]:对应颜色值的位置,与颜色值数组个数相等,里面的值均为(0–1)的数字。
先看一张效果图(图一):
这就是一张渐变圆环图,上面的箭头和数字后面解释。
我们主要研究第二个构造函 ...
墨香带你学Launcher之(四)- 应用安装、更新、卸载时的数据加载
上一章墨香带你学Launcher之(三)- 绑定屏幕、图标、文件夹和Widget讲了桌面CellLayout、图标、文件夹以及Widget的绑定流程,这个主要是第一次加载时的绑定流程,那么当用户安装新的应用,或者更新应用,或者卸载应用时桌面是如何处理的,今天我们来学习一下这个流程。
我们知道应用的安装和更新都是通过应用市场来启动,而应用的卸载是通过桌面或者系统的app管理来启动的,因此我们将应用的安装和更新一起来讲,而应用的卸载单独来讲。首先我们先看一下应用的安装和更新时桌面的数据加载。
应用安装和更新
当我们通过应用市场安装或者更新应用时,会调用系统的安装界面,并执行安装程序,在应用安装或者更新完成后系统会发出对应的广播,通过对应广播Launcher会执行相应的加载程序。首先我们看一个App管理的兼容库:LauncherAppsCompat,这里面有一个接口和一些抽象方法,我们用的到底主要是这个接口还有两个抽象方法:
接口类:
1234567public interface OnAppsChangedCallbackCompat { void onPack ...
Android动画收集
随着Android的发展,界面的动画效果越来越炫,做出更炫的效果也是Android交互的一种追求,Android动画库也越来越多,为了方便查找,再次做个记录。
ListViewAnimations
NineOldAndroids
AndroidViewAnimations
android-flip
Material-Animations
UltimateRecyclerView
recyclerview-animators
JazzyViewPager
AVLoadingIndicatorView
LollipopShowcase
RecyclerViewItemAnimators
HTextView
Swipeable-Cards
ViewPagerTransforms
android-ripple-background
Android-SpinKit
AnimationEasingFunctions
FoldableLayout
CircleRefreshLayout
TourGuide
JJSearchViewAnim
墨香带你学Launcher之(三)- 绑定屏幕、图标、文件夹和Widget
上一章我们讲了Launcher的数据加载,包括:默认配置应用、文件夹以及widget的加载,所有应用的加载以及所有Widget的加载,数据加载完成后开始分批进行绘制到桌面上,包含默认配置bind,所有应用bind,所有小部件bind。下面我就从这几个方面进行分析,看看他们的加载过程。
1.默认配置图标、Widget、文件夹的绑定(bind)
上一章讲到默认配置加载的位置:
123456789101112private void loadAndBindWorkspace() { ... if (!mWorkspaceLoaded) { loadWorkspace(); ... } // Bind the workspace bindWorkspace(-1); }
这里主要是加载默认配置,然后调用bindWorkspace进行绑定, ...