自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

just Go!

我是咸鱼,我是咸鱼,我是咸鱼!

  • 博客(118)
  • 资源 (5)
  • 收藏
  • 关注

原创 绘制简单条形图(带一个直角的圆角矩形)

一种方案是:path先添加一个圆角矩形,再添加一个角的正方形另一种直接通过api ,radii 需要传入8个数值,分四组,从左上角开始addRoundRect(RectF rect, float[] radii, Direction dir)中间有个小点:如果在一个循环里,同时画柱子和文字,会出现前面3个柱子上的文字被柱子覆盖,只有最后1个柱子才展示文字标记。比如说1是柱子,2是文字,画个柱子,画个文字;往右边挪挪位置,再画个柱子,再画个文字就是12121212的顺序,会出现前面3个2被1覆盖.

2020-09-11 17:36:46 880

原创 自定义圆环(渐变色,文字描述,带百分比)

动态设置百分比 btn1.setOnClickListener { childRate.setFraction(0.23f, true) }xml中引用控件,这里可以通过app:xxxx,使用所有在style中指定的属性<com.xxxxxxxxxx.widget.view.GradientCircleView android:id="@+id/childRate" android:layout_width="0dp" android:layo.

2020-09-10 17:35:48 399

原创 垂直跑马灯的三种实现(ViewFlipper、ViewSwitcher、属性动画)

文章目录自定义ViewSwitcher实现自定义ViewFlipper 实现属性动画 实现需求,需要实现 图文组合的垂直跑马灯的效果。如果只有一条数据,则固定不动多条数据,垂直跑马灯效果自定义ViewSwitcher实现查看源码ViewSwitcher 系统实现了两个子类,分别是TextViewSwitcher和ImageViewSwitcher,只能实现TextView和ImageView的动画效果(不能使用其他控件,或者图文混合),动画效果由Animation实现。不满足需求,所以自定义

2020-09-09 18:57:05 570

原创 8皇后问题,92种可能(java 回溯)看不懂算我输系列

public class Solution0812 { public static void main(String[] args) { Solution0812 solution = new Solution0812(); solution.eightQueen(8); } private int count = 0; private void eightQueen(int n) { //初始化,所有的格子填充一个点.

2020-05-19 20:09:42 2320

原创 仿八大行星绕太阳3D旋转效果

android实现八大行星绕太阳3D旋转效果仿上面效果,采用kotlin实现,逻辑要简单些,注释在源码中,一看就懂<com.example.androidxdemo.star.StarGroupView android:layout_width="0dp" android:layout_height="0dp" app:layout_co...

2019-12-25 14:49:37 1450

原创 Glide4.9.0源码分析总体流程

SingleRequest#begin()public synchronized void onSizeReady(int width, int height) { // status = Status.RUNNING; float sizeMultiplier = requestOptions.getSizeMultiplier(); this.width = may...

2019-12-05 15:03:51 186

原创 HttpUrlConnection使用

在Android开发中网络请求是最常用的操作之一, Android SDK中对HTTP(超文本传输协议)也提供了很好的支持,这里包括两种接口:1、标准Java接口(java.NET) —-HttpURLConnection,可以实现简单的基于URL请求、响应功能;2、Apache接口(org.appache.http)—-HttpClient,使用起来更方面更强大。但在android API...

2019-12-03 11:04:18 427

原创 okDownload1.0.5源码分析(断点续传)

参考:HTTP断点续传原理http协议 文件下载原理及多线程断点续传

2019-12-02 18:33:39 1417

原创 冷启动视觉优化

文章目录指定刘海屏显示模式定义主题themetheme配置相关属性支持延伸到刘海屏&沉浸式布局drawable设计为layer-list方式AndroidManifest定义theme <activity android:name=".modules.welcome.SplashActivity" android:screenOri...

2019-11-26 18:37:48 174

原创 AsyncTask源码分析(Api28)

文章目录AsyncTask实例化执行AsyncTask任务execute() 提交任务sDefaultExecutor线程池的创建任务执行结束回调进度值更新AsyncTask是个抽象类,需要自定义Task继承,实现其抽象方法。其底层实现:线程池 + Handler机制Params:执行AsyncTask时传入的参数,可用于在后台任务中使用。Progress:后台任务执行时,如果需要显示当...

2019-10-26 17:21:47 163

原创 LayoutInflater解析 (api28)

文章目录LayoutInflater实例化方式一:getLayoutInflater()方式二:LayoutInflater.from(context)LayoutInflater加载xml布局LayoutInflater.inflate(resId, root, attach)ViewGroup.addViewLayoutInflater.inflate(resId, root) 实现将xm...

2019-10-25 16:14:31 270 1

原创 SharedPreference源码解析(API29)

文章目录获取SP实例SP初始化获取键值对存入键值对commit & applycommitToMemory提交到内存中enqueueDiskWrite为什么SharedPreference不适合存储大容量数据总结获取SP实例在Activity中,可通过 getPreferences(mode) 获得sp实例(以当前类名为sp文件名)。任意ContextImpl的子类中,都可通过ge...

2019-10-22 19:14:41 258

原创 属性动画PropertyAnimation源码分析 (api28)

文章目录属性动画PropertyAnimation关键帧的处理AnimationHandler动画真正执行点总结:属性动画PropertyAnimation实例Button icon = (Button) findViewById(R.id.button1); ValueAnimator valueAnimator = ValueAnimator.ofInt(200, 400...

2019-10-15 16:59:27 201

原创 补间动画TweenAnimation源码分析(api28)

参考:View 补间动画运行原理属性动画运行原理View.animate运行原理

2019-10-15 12:46:04 240

原创 view.post源码解析 (API29)

参考:【Android源码解析】View.post()到底干了啥

2019-10-14 12:00:21 248

原创 View绘制流程和加载过程(一)

参考:Android 的屏幕刷新机制View 补间动画运行原理面试官又来了:你的app卡顿过吗?android屏幕刷新显示机制

2019-10-11 14:11:16 505

原创 贝塞尔曲线

文章目录一阶曲线二阶曲线三阶曲线四阶曲线五阶曲线贝塞尔曲线画圆一阶曲线一阶曲线是没有控制点的,仅有两个数据点(A 和 B),最终效果一个线段。二阶曲线二阶曲线由两个数据点(A 和 C),一个控制点(B)来描述曲线状态F就是贝塞尔曲线上的一个点(由A驶向C),动态过程如下。三阶曲线三阶曲线由两个数据点(A 和 D),两个控制点(B 和 C)来描述曲线状态四阶曲线四阶曲线...

2019-09-20 18:26:28 807

原创 Java线程池

文章目录Executors线程池工厂类ThreadPoolExecutor线程池具体实现类线程池状态线程池的关闭提交任务execute(runnable)提交任务添加worker启动任务使用线程池的优点:重用已经创建好的线程,避免频繁创建和销毁的系统开销控制线程并发数,合理使用系统资源,提高应用的性能手动管理线程,比如定时执行、取消执行等Executors线程池工厂类Excutor...

2019-09-11 19:12:43 158

原创 JsBridge 原生和Html交互

android与js的交互之jsbridge使用JsBridge-总结和优化

2019-09-09 16:59:47 618

原创 RxPermission 0.10.2 原理分析

文章目录为什么要进行权限申请?系统提供的权限申请方式RxPermissions的实现方式单个权限申请多个权限申请源码分析创建RxPermissions的实例为什么要进行权限申请?Android 6.0 ( API23 MarshMallow 棉花糖):运行时权限在6.0之前,应用安装时,会提示APP所需要的权限列表,同意之后安装,该app就被赋予所有的权限。在6.0之后,goog...

2019-08-16 19:04:14 612

原创 RxBus 简单分析

文章目录RxBus的实现如何解决RxBus存在内存泄露的问题?RxBus 可用于组件通讯。前面解说了eventBus的实现,注册、取消注册、发送消息,监听消息。RxBus的实现RxBus 并不是一个框架,而是一种使用 RxJava 实现事件总线的一种解决思路,实质是交由 RxJava 去实现。1、依赖引入,module的build.gradle中implementation 'io.r...

2019-08-16 17:32:15 514

原创 Rxlifecycle 2.1.0原理分析

文章目录简单使用源码分析如何监听activity/fragment的生命周期请求如何进行截断Observable#compose(composer)方法解析composer是LifecycleTransformer对象LifecycleTransformer是如何构建出来的bindToLifecycle分析bindUntilEvent()分析我们通常采用Retrofit + RxJava + G...

2019-08-16 16:52:24 773

原创 EventBus 3.1.1 源码解析(二)

EventBus从3.0开始支持APT,编译期生成文件,就可以得到eventType、subscriberMethod、subscriberClass的映射关系。app下的build.gradle中引入EventBus和EventBus注解处理器android { defaultConfig { //添加这个,eventBusIndex javaCom...

2019-08-14 18:33:50 128

原创 retrofit 2.6.1源码解析(二)converter

文章目录构建responseConverterGsonConverterFactoryGsonRequestBodyConverterGsonResponseBodyConverterRetrofit支持Gson,进行数据转换引入,很轻量呀,就3个类GsonConverterFactory,用于构建GsonConverter的工厂类GsonRequestBodyConverter,...

2019-08-13 11:09:25 341

原创 retrofit 2.6.1源码解析(一)

文章目录实例讲解源码解析创建Retrofit实例(构造者模式)PlatForm的获取动态代理得到接口的实例serviceMethod的获取构建OkHttpCall对象Retrofit2 github地址实例讲解Retrofit引入,常规操作。 implementation 'com.squareup.retrofit2:retrofit:2.6.1' implementation ...

2019-08-12 18:56:33 435

原创 Gson 2.8.5源码解析(二)

上一篇是默认的Gson对象,默认的TypeAdapter对象这一篇,通过GsonBuilder注册TypeAdapter,可构造自定义的TypeAdapter对象实例:public class GsonTest { private static String jsonStr = "{\n" + " \"title\": \"Java Puzzlers: T...

2019-08-10 11:28:47 502

原创 Gson 2.8.5源码解析(一)

对象序列化将java对象,转换为Json格式的字符串Gson gson = new Gson();String json = gson.toJson(book);创建StringWriter对象,再将其包装为JsonWriter对象根据TypeToken得到TypeAdapter,回调typeAdapter.write(jsonWriter, src)最终返回的就是这个string...

2019-08-10 10:53:34 505

原创 Canvas绘图之PorterDuffXfermode使用

使用案例:引导页的蒙层遮罩刮刮卡效果PorterDuff.Mode有16种public enum Mode { CLEAR (0), SRC (1), DST (2), SRC_OVER (3), DST_OVER (4), SRC_I...

2019-07-31 18:21:31 226

原创 FrameLayout嵌套CardView,导致View显示层级异常

FrameLayout嵌套CardView,会影响View显示层级。CardView继承自FrameLayout,可以显示圆角和阴影。因为阴影的缘故,cardView会置于父View的顶层,导致层级显示不正确,添加 app:cardElevation=“0dp” 属性即可<android.support.v7.widget.CardView android:layout...

2019-07-26 14:47:07 2187

原创 Context详解(API29)

Context是一个抽象类,我们通过这个Context可以访问包内的资源(res和assets)和启动其他组件(activity、service、broadcast)以及系统服务(systemService)等。所以Context提供了一个应用程序运行环境,在Context的环境里,应用才可以访问资源,才能和其他组件、服务交互,Context定义了一套基本功能接口,我们可以理解为一套规范,而Act...

2019-07-23 18:57:14 485

原创 apk安装

apk安装安装界面权限提示安装和卸载应用应用安装流程PackageManager对象安装界面权限提示apk(Android Package)是用于android平台上的一种压缩包Android系统中,有一个类似注册表的东西,用来记录当前所有安装的应用的基本信息,每次系统安装或者卸载了任何apk文件,都会更新这个文件,这个文件位于如下目录:/data/system/packages.xml。...

2019-07-23 16:50:56 508

原创 AIDL实现原理

AIDL(Android Interface Definition Language) 安卓接口定义语言。是实现Binder机制,跨进程通讯的一个模板。定义一个IRemoteService.aidl文件package com.example.aidldemo.aidltest;//自定义对象需要手动 import packageimport com.example.aidldemo.ai...

2019-07-18 15:19:55 410

原创 Android自定义View——遥控器按钮

效果图:原理:onSizeChanged拿到控件宽高,进行path和region的计算(此处,path和region的坐标值都是以viewWidth/2,viewHeight/2为坐标原点进行计算的)画布平移,绘制5个path点击事件,判断是否处于相应的region区域内,进行控件的重绘点击事件motionEvent的原始坐标(getX和getY),是以viewPare...

2019-07-10 18:53:07 2312 6

原创 Android自定义View——弹性的圆

效果图:一次快动作,一次慢动作分解原理:贝塞尔曲线画圆的系数求值:Approximate a circle with cubic Bézier curves1、动作分解不做位移运动,单点动作分解1.1、从A运动到B:P2、P3、P4 横坐标的变动P2/P4纵坐标的变动P8、P9、P10横坐标的变动P8/P10纵坐标的变动1.2、在B处做弹性运动:先凹进去一部分,再弹出来...

2019-07-01 18:29:15 411

原创 Android自定义View——qq消息气泡

效果图:原理:控件源码:public class DragView extends View { private int defaultZoomSize = 8; //初始化圆的大小 private int initRadius; //圆1的圆心位置 private PointF center1; private PointF cent...

2019-06-29 18:31:55 694 1

原创 Android自定义View——进度条动画

控件效果原理:控制代码//更新进度值val mHandler = object : Handler() { override fun handleMessage(msg: Message?) { progressView.setCurrentProgress(progress1.toFloat()) } }//开启动画...

2019-06-29 17:28:57 1286 1

原创 Android自定义View——水波纹效果

效果如下:原理控制代码//这里用的kotlin//主线程刷新控件 val mHandler = object : Handler() { override fun handleMessage(msg: Message?) { waterRippleView.refreshView() } //开启动画,开线程,延时刷新...

2019-06-29 16:32:57 448

原创 Android自定义View——雷达图

分析绘制雷达背景图 drawline绘制文字标签 drawText填充雷达数据 drawPath描点 drawPoint全部代码如下所示:如果要修改为五边形、四边形,只要将borderCount 修改为相应值即可另外数据源的个数要大于等于borderCount,不然会空指针异常,请自己做好兼容性处理public class RadarView extends View {...

2019-06-27 14:54:14 816

原创 Android 类加载机制(API27)

JVM加载的是class文件,系统提供的类加载器(BootStrapClassLoader、ExtensionClassLoader、ApplicationClassLoader)安卓虚拟机加载的是dex文件,系统提供的dex加载器(DexClassLoader、PathClassLoader)class文件、资源文件、AndroidManifest.xml 经过编译打包,成为ap...

2019-06-13 18:31:55 466

原创 热修复

热修复: 当线上应用出现紧急BUG,为了避免重新发版,并且保证修复的及时性而进行的一项在线推送补丁的修复方案。插件化: 一个程序划分为不同的部分,以插件的形式加载到应用中去,本质上它使用的技术还是热修复技术,只是加入了更多工程实践,让它支持大规模的代码更新以及资源和SO包的更新。参考热修复——深入浅出原理与实现...

2019-06-10 17:21:53 437

swipeRefreshLayout实现了上拉和下拉功能

使用SwipeRefreshLayout来实现下拉刷新和上拉加载功能即可,里面嵌套ListView。可在listView上嵌套scrollView,亲测可用

2016-09-08

scrollView嵌套ListView的下拉刷新和加载更多

scrollView嵌套ListView, ListView里又嵌套了GridView ,实现了下拉刷新和加载更多,代码简单,不依赖第三方包。

2016-09-08

Android通过PHP连接mysql

包含一个sql文件,一个php文件,和一份android代码,搭配好环境之后,可以直接运行,连接mysql ,适合初学者

2016-04-16

Android动画效果translate、scale、alpha、rotate详解

简单易懂,非常适合入门的开发者了解android 的animation 。 博文参考

2016-04-12

MD5指定秘钥(借助DES)

MD5不指定秘钥 ,但是,我们可以这样做, 先用MD5加密,然后用DES算法(DES加密是可以指定秘钥的,也是可以还原的),自己设置密匙进行再次加密,然后还原成MD5加密后的数据。

2016-04-12

空空如也

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

TA关注的人

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