chenkaisq的博客

私信 关注
chenkaisq
码龄4年
  • 21,145
    被访问量
  • 30
    原创文章
  • 203,691
    作者排名
  • 3
    粉丝数量
  • 毕业院校 中国矿业大学(北京)
  • 于 2016-12-17 加入CSDN
获得成就
  • 获得7次点赞
  • 内容获得4次评论
  • 获得7次收藏
荣誉勋章
兴趣领域
  • #Android
    #Android Jetpack#Flutter#gradle#数据结构#Android Studio#Kotlin#Java#面试#性能优化#RxJava
TA的专栏
  • Androd
    29篇
  • 网络请求
    3篇
  • handler
    2篇
  • 内存泄漏
    1篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Android中自定义view

文章目录1.继承系统控件的自定义view2.继承View的自定义view3.继承ViewGroup的自定义view源码地址1.继承系统控件的自定义view在这里以TextView为例,自定义一个斜划线的TextView,效果如图这个比较简单,主要是重写onDraw()方法,直接上代码了package com.test.ck.customview;import android.con...
原创
100阅读
0评论
1点赞
发布博客于 2 年前

继承ViewGroup的自定义view

文章目录1.效果和自定义view的完整代码2.对wrap_content属性的处理3.onLayout处理4.弹性滑动和快速滑动1.效果和自定义view的完整代码这里写一个水平滑动自定义view,效果如图先给个完整的自定义MyCustomViewGroup代码,然后在一步步分析package com.test.ck.customview;import android.content....
原创
405阅读
0评论
1点赞
发布博客于 2 年前

Android中view的工作流程

由于篇幅太大,所以本章拆分为4篇,下面是文章链接MeasureSpecview的measure流程view的layout流程view的draw流程
原创
76阅读
0评论
1点赞
发布博客于 2 年前

View的draw流程

View的draw流程先看下view的draw()方法(ViewGroup并没有重写draw方法) public void draw(Canvas canvas) { final int privateFlags = mPrivateFlags; final boolean dirtyOpaque = (privateFlags & PFLAG_DIR...
原创
162阅读
0评论
0点赞
发布博客于 2 年前

View的layout流程

View的layout流程layout()方法的作用是确定元素的位置。ViewGroup中的layout方法用来确定子元素的位置,View中的layout方法则用来确定自身的位置.先看下view的layout方法(ViewGroup里的layout方法也调用了View中的layout方法) public void layout(int l, int t, int r, int b) {...
原创
85阅读
0评论
0点赞
发布博客于 2 年前

view的measure流程

文章目录view的measure流程1.View的measure流程2.ViewGroup的measure流程view的measure流程1.View的measure流程view的measure流程实在onMeasure()方法完成的,源码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)...
原创
92阅读
0评论
0点赞
发布博客于 2 年前

理解MeasureSpec

文章目录MeasureSpec1.概述2.MeasureSpec的3种模式MeasureSpec1.概述MeasureSpec是View的内部类,它封装了view的高和宽的信息,其作用是在measure流程中,将View的LayoutParams根据父容器所施加的规则转换成对应的MeasureSpec,其源码如下: public static class MeasureSpec { ...
原创
93阅读
0评论
0点赞
发布博客于 2 年前

Android中的事件分发机制的源码解析

文章目录1.Activity的分发机制2.ViewGroup的分发机制1.Activity的分发机制activity中主要涉及dispatchTouchEvent和onTouchEvent2个方法.dispatchTouchEvent /** * Called to process touch screen events. You can override this to ...
原创
113阅读
0评论
0点赞
发布博客于 2 年前

Android中的属性动画

1.ObjectAnimator类常用的属性值:(ObjectAnimator是继承ValueAnimator的)• translationX和translationY:用来沿着X轴或者Y轴进行平移。• rotation、rotationX、rotationY:用来围绕View的支点进行旋转。• PrivotX和PrivotY:控制View对象的支点位置,围绕这个支点进行旋转和缩放变换处理...
原创
110阅读
0评论
0点赞
发布博客于 2 年前

Android进阶之路读书笔记-Scroller解析

(此文接续 view滑动的方法 一文)Scroller的构造方法: public Scroller(Context context) { this(context, null); } /** * Create a Scroller with the specified interpolator. If the interpolator is ...
原创
37阅读
0评论
0点赞
发布博客于 2 年前

Android进阶之路读书笔记-view滑动的方法

view滑动的6种方法layout(), offsetLeftAndRight()与offsetTopAndBottom(), LayoutParams, 动画, scollTo 与 scollBy以及Scroller。layout()自定义view/** * Created by ck on 2019/3/21. */public class MyCustomView exte...
原创
54阅读
0评论
0点赞
发布博客于 2 年前

Android进阶之路读书笔记-Android坐标系和view坐标系

1.Android坐标系• getRawX():获取点击事件距离整个屏幕左边的距离,即绝对坐标。• getRawY():获取点击事件距离整个屏幕顶边的距离,即绝对坐标。2.view坐标系View自身的坐标• getTop():获取View自身顶边到其父布局顶边的距离。• getLeft():获取View自身左边到其父布局左边的距离。• getRight():获取View自身右...
原创
77阅读
0评论
0点赞
发布博客于 2 年前

CoordinatorLayout+自定义Behavior

1.CoordinatorLayoutCoordinatorLayout is a super-powered FrameLayout,即CoordinatorLayout 是一个超级强大的FrameLayout,它的作用是通过Behavior 协调子View 之间的关系2.自定义Behavior自定义Behavior有两种方法:第一种是定义的View监听另一个view的变化(例如大小...
原创
203阅读
0评论
0点赞
发布博客于 2 年前

CoordinatorLayout+AppbarLayout+CollapsingToolbarLayout的使用以及配合使用实现Toolbar的折叠效果

1.CoordinatorLayout
原创
3175阅读
0评论
1点赞
发布博客于 2 年前

Android进阶之路读书笔记-Snackbar与TextInputLayout

1.Snackbarsnackbar相对dialog来说,更加轻量级,相对于toast来说,它为用户多提供了一个点击操作.Snackbar显示在屏幕的底部,包含了文字信息与一个可选的操作按 钮,它可以在指定时间结束之后自动消失(ps:Snackbar配合CoordinatorLayout使用可以滑动删除)2.Snackbar小demopackage com.test.ck.snackbar...
原创
77阅读
0评论
0点赞
发布博客于 2 年前

Android进阶之路读书笔记-Android6.0运行权限与Android7.0多窗口模式

1.Dangerous PermissionAndroid6.0之后,对于危险级别的权限,需要向用户动态申请,这些危险级别的权限是以组的形式出现的,同一组的任何一个权限被授权了,其他的也自动被授权2.以拨打电话为例写的一个小demopublic class MainActivity extends AppCompatActivity { @Override protect...
原创
109阅读
0评论
0点赞
发布博客于 2 年前

android进阶之路读书笔记 - android5.0新特性之CardView

1.CardView概念CardView继承自FramLayout,可以设置圆角和阴影,能够使控件更加立体性.2.CardView的基本属性android:cardBackgroundColor 设置背景android:cardCornerRadius 设置圆角app:cardElevation 设置阴影大小app:cardMaxElevation 设置阴影的最大高度app:cont...
原创
185阅读
0评论
0点赞
发布博客于 2 年前

Handler消息机制

andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到...
转载
50阅读
0评论
0点赞
发布博客于 3 年前

Handler的内存泄漏解决办法

其实网络上已经有很多关于handler的内存泄漏的讲解和处理了,此处作为自己的笔记记录下.先来一段比较常见的代码package com.jetair.ordercenter.ui.activity;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActiv...
原创
102阅读
0评论
0点赞
发布博客于 3 年前

Android 横向滚动和纵向滚动的TextView

横向滚动TextViewTextView的横向滚动,本身自带的跑马灯效果+自定义一个简单的TextView即可实现. 自定义view代码如下:public class HorizontalTextview extends TextView { public HorizontalTextview(Context context) { super(context);...
原创
2308阅读
1评论
1点赞
发布博客于 3 年前

Android版本更新下载apk文件到sd卡并自动安装

版本更新,需要注意的是android7.0和8.0的安装问题android8.0以上得需要安装未知来源应用的权限<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>android7.01.android7.0需要在清单文件注册 <provider ...
原创
1741阅读
1评论
0点赞
发布博客于 3 年前

一个简单的倒计时控件的实现

好久没有写博客了,本来想当做自己的知识库来着,但是有时候不能坚持下来,今天有时间就再来更新下,就写一个简单的倒计时实现,其实没啥难点,Handler+Timer就可以实现.原理就是:启动一个定时器,每个1秒钟利用handler发送一个请求,然后到handleMessage处理,判断小时,分钟,秒是多少,最后显示到页面上(没有特别难理解的,代码里面就没有写注释,ps:貌似好像也是借鉴的别人的,但是时间
原创
1023阅读
0评论
0点赞
发布博客于 4 年前

水平方向的LinearLayout的addview问题

![添加的view过多空间就不够用了,求大神解决](https://img-ask.csdn.net/upload/201708/11/1502422225_659915.png)
3回答
发布问题于 4 年前

网络请求库(ion、volley、retrofit)和图片加载库(glide、picasso、fresco)

前言熟练掌握目前最流行网络请求类库的使用,如:Ion:Android Asynchronous Networking and Image LoadingVolley:谷歌官方推出的网络请求和图片加载库Retrofit:Square开源的基于OKHttp的性能良好更安全的类库熟练掌握目前最流行图片加载类库的使用,如:Glide:专注于处理流畅加载的图片类库Picasso:
原创
1159阅读
1评论
1点赞
发布博客于 4 年前

Socket简介(转)

简单理解SocketTCP/IP要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整
转载
192阅读
0评论
0点赞
发布博客于 4 年前

Http协议post请求

Post请求 Post请求与Get请求的区别 Get请求的参数是直接放在url后面的,而Post请求是放在请求体中的 Get请求参数的长度会根据浏览器的不同实现有一定限制,而Post请求参数长度没有限制 Get请求方便测试,直接输入地址即可,而Post请求不方便测试,需要借助代码或者工具进行发送 Get请求和Post请求没有本质的区别,只是定义上的区别,比如如果
原创
1761阅读
0评论
0点赞
发布博客于 4 年前

LeakCanary检查内存泄露

LeakCanary检测内存泄露内存泄露 内存泄露的概念 当一个对象已经不再需要却无法被GC回收,就是内存泄露 内存泄露的危害 1.“A small leak will sink a great ship.” - Benjamin Franklin 2.千里之堤, 毁于蚁穴。 – 《韩非子·喻老》 3.对于移动设备来说,运行内存想极其有限的,分配给每个app的内存也是有上限
原创
302阅读
0评论
0点赞
发布博客于 4 年前

图片加载库比较总结

原理概述:图片加载的工作流(task flow)都是3级缓存的流程;图片的内存缓存一定是LruCache实现;图片下载和读取线程的调度一定是通过线程池管理
原创
354阅读
0评论
0点赞
发布博客于 4 年前

网络请求库比较总结

概述:所有网络库的原理是: 网络请求一般是基于HttpURLConnection和HttpClient进行封装的,也有自己编写Socket实现的,比如ion和OkHttp;请求的执行一般是通过线程池来管理,异步请求得到结果,则通过回调接口接收;并且一般接收结果的回调都通过Handler去在主线程执行
原创
355阅读
0评论
0点赞
发布博客于 4 年前

主界面的Fragment切换之使用RadioGroup配合切换Fragment

package com.heima.oschina;import android.os.Bundle;import android.support.v4.app.FragmentTabHost;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Frame
原创
3338阅读
1评论
1点赞
发布博客于 5 年前

主界面的Fragment切换之使用FragmentTabHost配合切换Fragment

package com.heima.oschina;import android.os.Bundle;import android.support.v4.app.FragmentTabHost;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Frame
原创
371阅读
0评论
0点赞
发布博客于 5 年前

Checkbox复用导致错乱

定义一个类继承Dialog:public class CustomDialog extends Dialog 在oncreate方法里调用setContentView 实现布局 类似于activity将dialog设置显示在屏幕下方 在构造方法里 获取window 调整window显示位置:
原创
435阅读
0评论
0点赞
发布博客于 5 年前

自定义Diaglog

定义一个类继承Dialog:public class CustomDialog extends Dialog 在oncreate方法里调用setContentView 实现布局 类似于activity将dialog设置显示在屏幕下方 在构造方法里 获取window 调整window显示位置:
原创
1413阅读
0评论
0点赞
发布博客于 5 年前