自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android中自定义view

文章目录1.继承系统控件的自定义view2.继承View的自定义view3.继承ViewGroup的自定义view源码地址1.继承系统控件的自定义view在这里以TextView为例,自定义一个斜划线的TextView,效果如图这个比较简单,主要是重写onDraw()方法,直接上代码了package com.test.ck.customview;import android.con...

2019-04-18 18:30:00 217

原创 继承ViewGroup的自定义view

文章目录1.效果和自定义view的完整代码2.对wrap_content属性的处理3.onLayout处理4.弹性滑动和快速滑动1.效果和自定义view的完整代码这里写一个水平滑动自定义view,效果如图先给个完整的自定义MyCustomViewGroup代码,然后在一步步分析package com.test.ck.customview;import android.content....

2019-04-18 18:28:40 600 1

原创 Android中view的工作流程

由于篇幅太大,所以本章拆分为4篇,下面是文章链接MeasureSpecview的measure流程view的layout流程view的draw流程

2019-04-15 18:06:49 162

原创 View的draw流程

View的draw流程先看下view的draw()方法(ViewGroup并没有重写draw方法) public void draw(Canvas canvas) { final int privateFlags = mPrivateFlags; final boolean dirtyOpaque = (privateFlags & PFLAG_DIR...

2019-04-15 18:03:14 338

原创 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) {...

2019-04-15 18:02:33 293

原创 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)...

2019-04-15 18:01:09 181

原创 理解MeasureSpec

文章目录MeasureSpec1.概述2.MeasureSpec的3种模式MeasureSpec1.概述MeasureSpec是View的内部类,它封装了view的高和宽的信息,其作用是在measure流程中,将View的LayoutParams根据父容器所施加的规则转换成对应的MeasureSpec,其源码如下: public static class MeasureSpec { ...

2019-04-15 17:59:21 227

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

文章目录1.Activity的分发机制2.ViewGroup的分发机制1.Activity的分发机制activity中主要涉及dispatchTouchEvent和onTouchEvent2个方法.dispatchTouchEvent /** * Called to process touch screen events. You can override this to ...

2019-04-02 16:10:31 170

原创 Android中的属性动画

1.ObjectAnimator类常用的属性值:(ObjectAnimator是继承ValueAnimator的)• translationX和translationY:用来沿着X轴或者Y轴进行平移。• rotation、rotationX、rotationY:用来围绕View的支点进行旋转。• PrivotX和PrivotY:控制View对象的支点位置,围绕这个支点进行旋转和缩放变换处理...

2019-03-29 15:54:16 182

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

(此文接续 view滑动的方法 一文)Scroller的构造方法: public Scroller(Context context) { this(context, null); } /** * Create a Scroller with the specified interpolator. If the interpolator is ...

2019-03-22 17:04:02 108

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

view滑动的6种方法layout(), offsetLeftAndRight()与offsetTopAndBottom(), LayoutParams, 动画, scollTo 与 scollBy以及Scroller。layout()自定义view/** * Created by ck on 2019/3/21. */public class MyCustomView exte...

2019-03-22 17:03:43 160 2

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

1.Android坐标系• getRawX():获取点击事件距离整个屏幕左边的距离,即绝对坐标。• getRawY():获取点击事件距离整个屏幕顶边的距离,即绝对坐标。2.view坐标系View自身的坐标• getTop():获取View自身顶边到其父布局顶边的距离。• getLeft():获取View自身左边到其父布局左边的距离。• getRight():获取View自身右...

2019-03-21 11:24:03 159

原创 CoordinatorLayout+自定义Behavior

1.CoordinatorLayoutCoordinatorLayout is a super-powered FrameLayout,即CoordinatorLayout 是一个超级强大的FrameLayout,它的作用是通过Behavior 协调子View 之间的关系2.自定义Behavior自定义Behavior有两种方法:第一种是定义的View监听另一个view的变化(例如大小...

2019-03-20 14:53:45 466

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

1.CoordinatorLayout

2019-03-20 14:51:22 6718

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

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

2019-03-13 15:16:06 152

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

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

2019-03-12 11:22:16 221

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

1.CardView概念CardView继承自FramLayout,可以设置圆角和阴影,能够使控件更加立体性.2.CardView的基本属性android:cardBackgroundColor 设置背景android:cardCornerRadius 设置圆角app:cardElevation 设置阴影大小app:cardMaxElevation 设置阴影的最大高度app:cont...

2019-03-07 15:16:48 322

转载 Handler消息机制

andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到...

2018-12-21 16:40:03 121

原创 Handler的内存泄漏解决办法

其实网络上已经有很多关于handler的内存泄漏的讲解和处理了,此处作为自己的笔记记录下.先来一段比较常见的代码package com.jetair.ordercenter.ui.activity;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActiv...

2018-12-18 14:22:55 247

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

横向滚动TextViewTextView的横向滚动,本身自带的跑马灯效果+自定义一个简单的TextView即可实现. 自定义view代码如下:public class HorizontalTextview extends TextView { public HorizontalTextview(Context context) { super(context);...

2018-07-20 15:20:35 2874 1

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

版本更新,需要注意的是android7.0和8.0的安装问题android8.0以上得需要安装未知来源应用的权限<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>android7.01.android7.0需要在清单文件注册 <provider ...

2018-06-26 14:45:18 2572 1

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

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

2017-12-19 15:24:00 1175

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

前言熟练掌握目前最流行网络请求类库的使用,如:Ion:Android Asynchronous Networking and Image LoadingVolley:谷歌官方推出的网络请求和图片加载库Retrofit:Square开源的基于OKHttp的性能良好更安全的类库熟练掌握目前最流行图片加载类库的使用,如:Glide:专注于处理流畅加载的图片类库Picasso:

2017-03-30 11:44:58 1320 1

转载 Socket简介(转)

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

2017-01-13 14:37:08 243

原创 Http协议post请求

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

2017-01-10 15:03:41 2387

原创 LeakCanary检查内存泄露

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

2017-01-10 09:43:06 366

原创 图片加载库比较总结

原理概述:图片加载的工作流(task flow)都是3级缓存的流程;图片的内存缓存一定是LruCache实现;图片下载和读取线程的调度一定是通过线程池管理

2017-01-04 19:39:34 435

原创 网络请求库比较总结

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

2017-01-04 19:30:48 469

原创 主界面的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

2016-12-20 16:15:28 3567 1

原创 主界面的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

2016-12-20 15:46:07 470

原创 Checkbox复用导致错乱

定义一个类继承Dialog:public class CustomDialog extends Dialog 在oncreate方法里调用setContentView 实现布局 类似于activity将dialog设置显示在屏幕下方 在构造方法里 获取window 调整window显示位置:

2016-12-18 12:39:44 557

原创 自定义Diaglog

定义一个类继承Dialog:public class CustomDialog extends Dialog 在oncreate方法里调用setContentView 实现布局 类似于activity将dialog设置显示在屏幕下方 在构造方法里 获取window 调整window显示位置:

2016-12-17 22:06:42 1986

空空如也

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

TA关注的人

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