Android自定义控件/自绘教程
带你了解系统控件的绘制流程, 带你扩展系统控件, 带你突破系统自绘控件.
angcyo
没有一跃而成的成就, 只有慢慢积累的菜鸟.
展开
-
Kotlin--›Kotlin时代的Adapter(Android 一个话时代的DslAdapter(多类型,情感图,加载更多,多选,群组等))
DslAdapterDsl 的形式使用 RecyclerView.Adapter, 支持情感图状态切换, 加载更多, 多类型Item等所有Item继承自DslAdapterItem即可在DslAdapter中使用.特性1.全网最轻量的多类型Item实现方法2.支持情感图状态(空布局 加载中 错误异常等)切换 完美支持自定义扩展3.支持加载更多 完美支持自定义扩展即将支持 分组...原创 2019-10-17 18:58:59 · 1032 阅读 · 0 评论 -
Kotlin-->自定义评分控件RatingBar
首先了解下, 自定义View的三部曲.1:onMeasure方法此方法主要目的, 就是根据xml的 android:layout_width="wrap_content" android:layout_height="wrap_content"wrap_content match_parent 这2个属性, 来确定测量自身的大小. 当然, 这2个值, 只是parent告诉你,原创 2017-09-19 10:58:16 · 1237 阅读 · 0 评论 -
Kotlin-->范围选择进度条, 双向SeekBar
首先了解下, 自定义View的三部曲.1:onMeasure方法此方法主要目的, 就是根据xml的 android:layout_width="wrap_content" android:layout_height="wrap_content"wrap_content match_parent 这2个属性, 来确定测量自身的大小. 当然, 这2个值, 只是parent告诉你,原创 2017-09-19 11:11:59 · 1989 阅读 · 0 评论 -
Kotlin-->模仿QQ发送图片进度效果
效果图:效果分析 1. 带圆角的布局.(Canvas的clipPath方法实现, 不在本文介绍) 2. 蒙层(绘制一个有透明度的黑色) 3. 进度百分比(Canvas的drawText, 难点就是控制绘制的x和y坐标) 4. 白色进度圆圈(本文介绍,难点1) 5. 最外层是具有一定透明度的白色进度圆圈(实现方法和4一致)在Android中, 要绘制 圆柱形圆圈 , 及其不容易. 有同学可原创 2017-11-21 09:45:31 · 854 阅读 · 6 评论 -
Kotlin--›Android 超高模仿QQ7.5 侧滑菜单
效果图: 特性模仿全屏可视区域滑动检测 (菜单关闭和打开状态, 都支持)内容区域滑动过程中自带阴影遮罩菜单打开状态, 点击阴影区域自动关闭滑动过程中, 视差效果可以嵌套在其他具有滚动特性的View中实现方法如果使用 ViewDragHelper 那么局限性会很多, 所以这里我采用了最原始的TouchEvent控制.以下代码, 只贴部分片段, 详细请下载源码首先...原创 2018-04-04 10:33:55 · 739 阅读 · 0 评论 -
Kotlin--›如何实现一个自己的自定义TabLayout(附Touch事件分发)
前言你能学到啥?自定义View的基础知识ViewGroup中Child View的测量布局控制Touch事件的传递,拦截和处理draw和OnDraw方法的区别OverScroller的使用GestureDetector的使用ViewGroup中setWillNotDraw方法的作用Canvas的使用方法(自绘的核心类)需求分析TabLayout的...原创 2018-07-21 13:24:03 · 981 阅读 · 2 评论 -
Kotlin--›Android 自定义实现支付密码数字键盘
你能学到什么kotlin的使用, 扩展特性的写法等自定义ViewGroup的一些基础知识xml属性的编写和读取 因为每个按键都考虑到需要支持背景设置等其他个性设置和Touch手势的处理, 所以我决定采用 每个按键 对应一个View的思路实现. 否则可以使用Canvas.drawText实现 这样可以提高扩展性和可自定义性1.根据效果图先定义按键//首先定...原创 2018-07-20 16:12:40 · 767 阅读 · 0 评论 -
Android-->RecyclerView的上手教程(模仿画廊效果)
效果图: 考虑到图片体积, 上一个和下一个的按钮,没有截图出来.RecyclerView使用教程1:创建RecyclerView,也可以在布局中创建recyclerView = new RecyclerView(this);2:创建LinearLayoutManager对象,这个对象可以设置 垂直和水平滚动的方向manager = new LinearLayoutManager(this);原创 2015-06-10 16:44:40 · 5081 阅读 · 0 评论 -
Android-->View.setX()和.setY()的使用(移动布局,设置布局位置,动态添加View)
Android-->View.setX()和.setY()的使用(移动布局,设置布局位置,动态添加View)原创 2015-08-02 11:53:43 · 23873 阅读 · 2 评论 -
Android-->FlowRadioGroup(流式布局RadioGroup, 自定义View的简单使用)
项目源码地址: https://github.com/angcyo/FlowRadioGroup为了更好的拥有RadioGroup的属性/方法: 1:新建一个View,继承RadioGrouppublic class FlowRadioGroup extends RadioGroup流式布局最重要的就是,测量子View 的大小和子View 的布局位置 2:重写onMeasure和onLayout原创 2015-10-23 12:10:17 · 4213 阅读 · 1 评论 -
Android-->RatingBar自定义大小,自定义样式(图片)
1:首先声明自定义RatingBar的样式(values/styles.xml)<style name="RadingStyle" parent="@android:style/Widget.RatingBar"> <!-- 定义星星图片 --> <item name="android:progressDrawable">@drawable/rating_bar</item>原创 2015-11-17 10:19:20 · 13217 阅读 · 2 评论 -
Android--›圆角图片,圆角任意View,圆角父布局Layout(任意形状的View且超简洁实现)
相信大家对圆角图片已经非常熟悉了,但是圆角任意View,和圆角父布局,甚至是任意形状的View,肯定还是比较陌生的.今天就揭开她的面纱.圆角图片移步:http://blog.youkuaiyun.com/lmj623565791/article/details/24555655 View的Draw过程移步:http://blog.youkuaiyun.com/fener10289/article/details/8231原创 2016-04-17 00:41:13 · 9703 阅读 · 2 评论 -
Android-->自定义模版EditText(多用于手机号码,银行卡号等输入)
先看看效果图: 方法其实很简单,都没啥好写的咯;简单说一下思路吧:1:首先从模版中,拿到关键点所在的位置,保存在List中.private void initView() { if (!TextUtils.isEmpty(patternString)) { for (int i = 0; i < patternString.length(); i++) {原创 2016-06-13 14:45:08 · 2137 阅读 · 1 评论 -
Android-->ViewDragHelper的详细使用方法
ViewDragHelper是Android系统原生封装用于ViewGroup滑动的类库.(ViewDragHelper只能用在ViewGroup中.)使用ViewDragHelper,可以非常方便的在ViewGroup中移动,滑动任意一个子View,并且控制相当方便.1:基础代码模版public class ViewDragTestLayout extends RelativeLayout {原创 2016-07-31 00:43:53 · 1227 阅读 · 0 评论 -
Android-->RecyclerView.ItemDecoration分割线详解
RecyclerView.ItemDecoration不仅仅只是用来画线实现分割线这么简单;你可以绘制everything, 只要你想要; 都可以;最常用的: 绘制分割线; 绘制分组标题;点这里查看效果图参考文档: http://blog.youkuaiyun.com/pengkv/article/details/50538121ItemDecoration有3个重要的方法:@Overridepubli原创 2016-10-16 14:30:48 · 3845 阅读 · 0 评论 -
Android-->如何优雅的切换表情和键盘(原理)
网上有很多开源的项目, 但通常都封装的很复杂, 并不能很友好的自定义, 甚至原理都看不清楚.没关系, 这篇文章就是讲原理的. 让你分分钟都能自定义一个出来.正常情况下, 当我们切换表情和键盘的时候, Layout会跳动, 体验极其差.有几个前提需要满足:<activity android:windowSoftInputMode="adjustResize" //这个是必原创 2016-10-19 21:43:39 · 4817 阅读 · 1 评论 -
Android-->轻松打造带删除按钮的输入框(EditText),附Emoji表情过滤
输入框带删除按钮, 此乃标配, 实现起来方法也很多, 网上开源也很多.但是, 没事就喜欢瞎折腾.上图说话. 只是在原生的基础上加了扩展. 相对来说入侵非常少, 使用方法和原生的一模一样.无任何阉割.完整代码:public class ExEditText extends AppCompatEditText { Rect clearRect = new Rect(); public Ex原创 2016-11-20 12:04:27 · 3069 阅读 · 0 评论 -
Android--›状态栏高度,导航栏高度,Window高度,DecorView高度,heightPixels
喔…这标题,吓我一跳;请稍等….思绪整理中…Android中, 经常被这些高度绊脚. 完全进入懵逼的状态, 有木有?请允许我,介绍清楚!通常情况下, 宽度都是很友好的,但是高度就呵呵, 所以本文只介绍高度的计算.1:DecorView的高度 DecorView的高度代表的是: 整个装饰窗口的高度, 这个高度包括:状态烂的高度和导航栏的高度.(状态栏和导航栏通常叫做装饰窗口, 而ActionBar不原创 2016-11-20 14:30:56 · 7976 阅读 · 1 评论 -
Android--›键盘表情切换的终极解决方案(已重构)
之前写过一篇文章 Android–>如何优雅的切换表情和键盘(原理), 没有看多的可以看看. 这个方案有一个问题, 当状态栏透明的时候, 就会出现问题. 而且也不支持在Dialog中使用.实现方式也很简单, 但是代码逻辑很复杂, 不容易修改. 一不小心就会出错, 还找不到原因.今天这篇文章, 让你焕然一新. 完全颠覆之前的方案.前提,2个属性 android:windowSoftInputMod原创 2017-01-10 11:59:13 · 3225 阅读 · 2 评论 -
Android-->打造流行的无数据空布局页面
看图:实现方式,就是在一个自定义View里面, 绘制一个大的圆角矩形, 和三个小的圆角矩形.支持的属性,resources> declare-styleable name="EmptyView"> attr name="ev_default_color" format="color"/> attr原创 2017-01-01 17:19:14 · 3223 阅读 · 2 评论 -
Android-->如何将RecyclerView打造成ViewPager的效果
如题所示,都支持横向和纵向, 暂不支持StaggeredGridLayoutManager布局管理.如图: 在LinearLayoutManager中: 在GridLayoutManager中: 1:当adapter中Item的数量不足时, 需要用假数据填充. 否则最后一页显示不全, 达不到页面的效果.@Overridepublic int getItemCount() { raw原创 2017-01-03 22:26:16 · 5591 阅读 · 5 评论 -
Android-->RecyclerView模仿探探左右滑动布局
站在巨人的肩膀上,才能走得更远.参考文章:http://blog.youkuaiyun.com/zxt0601/article/details/53730908我在此基础上优化了部分代码, 添加了滑动回调, 可自定义性更强. 并且添加了点击按钮左右滑动的功能.据说无图都不敢发文章了. 看图:1:这种功能, 首先需要自己管理布局 继承 RecyclerView.LayoutManager , 显示自己管理布原创 2017-01-08 14:56:28 · 10140 阅读 · 8 评论 -
Android-->如何让普通View具有checked属性(背景xml支持checked状态)
当需要实现选择状态的时候,CompoundButton是系统提供的选择.我们可以很简单的通过isChecked(), 返回是否选中.也可以通过xml设置background的方法, 实现选中后的样式.但是, 有些时候, 系统提供的控件不足以满足我们的需求,,,这个时候就是头脑风暴的时候了.首先, 如果需要实现isChecked()返回是否选中, 那么自定义View的时候, 就需要自己通过一个变量原创 2017-01-10 16:14:40 · 4674 阅读 · 2 评论 -
Android-->Toast全屏和动画(模拟QQ样式)
如图, 底下是一个空布局, 参考我的博文: http://blog.youkuaiyun.com/angcyo/article/details/53967099 顶部就是一个Toast. 全屏,并且进入和退出都有自定义的动画.正文: 系统并没有提供设置全屏和动画的方法.但是Java有一个神器, 反射. 我们可以通过反射. 肆意修改成员变量.//全屏和动画的设置方法private static void原创 2017-01-14 13:41:17 · 2544 阅读 · 8 评论 -
Android-->RecyclerView分组悬浮标题(分割线)
客官先看图: https://github.com/angcyo/ContactsPicker/blob/master/screenshot/1%E6%9C%88-15-2017%2016-17-46.gifRecyclerView中实现分组功能, 和 实现分割线 使用的是相同原理. 就是手动绘制信息.都是继承RecyclerView.ItemDecoration分割线的实现传送门:http://原创 2017-01-15 16:48:36 · 3762 阅读 · 0 评论 -
Android--›打造无限循环的RecyclerView(已更新新方式)
难点分析: 1:如何在有限的数据里面, 实现无限个Item呢? 2:如何让滑动的时候, 一个一个的滑动, 而不会一下子滚动多个呢? 3:如何在第一次显示的时候, 就可以左滑呢?更新于2018-3-8 鉴于之前的时候方式, 有很多问题, 思路也不是特别好. 最近在学习的过程中, 发现了大神写了自定义的ViewPagerLayoutManager支持无限循环, 所以我就打算使用...原创 2017-03-01 14:38:02 · 17220 阅读 · 3 评论 -
Android-->Behavior上手入门
开始布局时,方法回调顺序:1:StickBehavior([context, attrs])-> 2:onAttachedToLayoutParams([params])->3:layoutDependsOn([parent,child,dependency])->//当dependency是你需要监听的View时,需要返回true, 否则dependency View位置改变, 或者大小改变不原创 2017-03-16 16:15:51 · 1088 阅读 · 0 评论 -
Android--›模仿QQ7.0底部导航效果(kotlin版)
来一波效果图有没有一种蠢蠢欲动的想法? 反正我已经动了.分析一波 1:选中状态, 和未选中状态显示的图片不一样. 这个简单:一个Boolean成员变量控制. 2:当手指360°滑动的时候,图片会跟随移动.这个就是核心了, 需要计算手指距离图片中心的角度, 然后计算出偏移的dx,dy值. 3:细心的你, 可能已经发现了, 笑脸其实并不是相对滚动的, 是有滚动差的. 这个可以在步骤2计算原创 2017-06-06 13:37:41 · 2977 阅读 · 1 评论 -
Android-->输入框自动提示文本, 失去焦点自动输入
客官请看图功能简介 检查文本输入框当前输入的字符串, 进行后台匹配, 如果匹配到了, 就进行提示. 当然, 这个提示并不是简单粗暴的setText, 因为用户的输入可能只是前面的一致而已.后面不一定相同呢. 一旦发现不匹配, 立即取消提示.原理1.自定义一个ExEditText 继承 AppCompatEditText public class ExEditText extends原创 2017-06-07 11:08:04 · 2214 阅读 · 1 评论 -
Android-->如何快速写出属于自己的圆角图片控件
客官请看图无处不在的圆角, 到处满天飞开源库, 是时候写一个属于自己的圆角控件了.原理通过Canvas强大的clip特性, 你要想什么形状的图片都可以的…class CircleImageView(context: Context, attributeSet: AttributeSet? = null) : AppCompatImageView(context, attributeSet) {原创 2017-06-08 18:00:55 · 790 阅读 · 0 评论 -
Android-->你真的会用属性动画(ValueAnimator)么
讲真, ValueAnimator并不能当做属性动画来理解, 因为这样会限制自己对它的理解, 也会限制对它的使用范围. This class provides a simple timing engine for running animations which calculate animated values and set them on target objects.官方描述文档其实也原创 2017-06-10 08:10:39 · 642 阅读 · 0 评论 -
Android-->ConstraintLayout解读
截止日前2017-08-27, ConstraintLayout的版本为1.0.2 compile ‘com.android.support.constraint:constraint-layout:1.0.2’也许你需要先了解一下ConstraintLayout一些xml属性的归纳相对位置约束属性layout_constraintLeft_toLeftOflayout_constraint原创 2017-08-27 11:11:55 · 1154 阅读 · 0 评论 -
Android-->自定义ViewGroup, 银行卡片布局
首先了解下, 自定义View的三部曲.1:onMeasure方法此方法主要目的, 就是根据xml的 android:layout_width="wrap_content" android:layout_height="wrap_content"wrap_content match_parent 这2个属性, 来确定测量自身的大小. 当然, 这2个值, 只是parent告诉你,原创 2017-09-19 11:32:19 · 1055 阅读 · 0 评论