![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
自定义view
文章平均质量分 96
RikkaTheWorld
一个OTAKU
展开
-
RecyclerView浅析
属于查漏补缺,因为之前一直没有对RecyclerView、ListView做技术总结,平时用就用了,但是像ViewHoder、RecyclerView的缓存机制并没有进行系统的学习,所以这次通过在RecyclerView使用上和源码上进行一个总结。1. ListView和RecyclerView的区别首先,ListView和RecyclerView他们的作用是一样的:在有限的手机屏幕上显示大量(无限)的View。而RecyclerView之所以有个Recycler,是因为一个View如果被显示了并且通原创 2020-05-16 18:57:16 · 428 阅读 · 0 评论 -
源码分析View的事件分发
在基于 源码分析View的绘制流程上,通过Android8.0源码分析View的事件分发机制。当我们点击屏幕时,就已经产生了点击事件,这个事件被封装成了一个 MotionEvent类。而事件的分发,指的就是MotionEvent在View之间的传递和处理。1. View的事件分发机制当点击事件产生后,就会先产生最开始的传递链:Activity -> PhoneWindow -> DecorView -> ContentView.dispatchTouchEvent()而Conte原创 2020-05-13 18:56:39 · 204 阅读 · 1 评论 -
源码分析View的绘制流程
源码基于Android8.0在Android应用程序启动(根Activity)过程中,我们知道Activity启动流程的最后一步就是调用 ActivityThread.handleLaunchActivity()方法:// ActivityThread.java private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent, String reason) { ... Activ原创 2020-05-13 14:09:10 · 194 阅读 · 0 评论 -
Android Fragment嵌套
这里写一个一个从一个fragment跳转到另一个fragment 首先fragment嵌套不要套太多,否则会变得繁重,然后出现一些bug,更难操作。 一般来说嵌套1、2个最好。这里只放最简单的实现代码:一个Activity放一个fragment,这个fragment里嵌套一个fragment。 多个fragment可以通过fragment数组来选择,所以就不做这些代码了。首先定义Ac...原创 2018-06-26 19:47:47 · 931 阅读 · 0 评论 -
SurfaceView 阶段总结
根据各位大牛加书总结一下SurfaceViewSurfaceView的作用是用于被动更新的View ① view主要适用于主动更新情况,并且只能在主线程绘制和更新画面。 ② surfaceView适用于特别频繁的刷新页面,比如游戏,摄像头,而且通过子线程来进行操作,实现了双缓冲机制SurfaceView它的绘制原理是绘制前先锁定画布(获取画布),然后等都绘制结束以后在对画布进行解锁 ,...原创 2018-04-11 23:18:19 · 147 阅读 · 0 评论 -
AS 关于控件默认大写问题
这里看的 传送门 Theme为AppTheme的话,控件text都是会默认大写 解决办法是在value中的styles下多加一行 <item name="android:textAllCaps">false</item>然后在控件中写入 android:textAllCaps="false"就OK辣...原创 2018-03-15 11:23:32 · 735 阅读 · 0 评论 -
初学使用ViewPager组件
ViewPager组件的作用是实现左右横划换页,如下图所示(图片来源于网络) 需要的组件: 1)main.XML中需要加载ViewPager还有PagerTabStrip PagerTabStrip的作用相当于每页的标题,如图中的热门商区,热门分类 代码如下:<android.support.v4.view.ViewPager android:原创 2017-09-28 21:36:59 · 751 阅读 · 0 评论 -
将Android Studio默认布局ConstraintLayout切换成LinearLayout
至于我对扁平化布局ConstraintLayout使用不是很熟悉,而Android Studio的默认布局就是ConstraintLayout,所以想将其默认布局改为LinearLayout找到安装AS路径 Android Studio\plugins\android\lib\templates\activities\common\root\res\layout 下面的simple.xml.ft原创 2017-08-11 00:13:34 · 16171 阅读 · 3 评论 -
属性动画详解
今天跟着blog详细了解属性动画。简书学习1、属性动画出现的原因属性动画是Android3.0之后出现的,而之前常用的两种动画为view动画和帧动画,不过他们有很多缺陷。(1)作用对象局限:viewview动画只能作用在view上,而无法对非view对象进行动画操作。有些情况下动画效果只是视图的某个属性而不是整个视图,比如需要实现一个视图的动态颜色变化,那么就需要操作视图的颜色属性而实现动...原创 2019-03-19 19:31:11 · 728 阅读 · 0 评论 -
Lottie动画概述
这里东Copy,西Copy一下 Lottie 的特点。学习的blog有:Lottie调研小结Lottie的基本用法及原理分析添加链接描述Lottie的概念原生的动画效果有时候写起来会非常的复杂,要考虑到很多兼容和效果。Lottie动画专门为了解决这种烦恼而产生的。(注:不仅是Lottie可以做到,另外一种库也可以做到将动画分成一帧一帧展示,它就是 android-gif-drawabl...原创 2019-10-23 16:38:44 · 2024 阅读 · 0 评论 -
关于decodeResource的一个坑
最近用Bitmap bm = BitmapFactory.decodeResource(App.getContext().getResources(), R.drawable.img);去解析一个图片,再通过bm的 width和heigh 用drawBitmap去把 bm居中画出来。有可能会出现这个bitmap跑偏的情况。原因是 App.getContext().getResource...原创 2019-09-25 09:32:49 · 823 阅读 · 0 评论 -
每周一个小轮子之 贴纸效果
上周有点事情,所以拖到今天发。这篇blog是学习 传送门的贴纸效果。Github在这里:Demo地址先上个效果图:是一个可以做平移、缩放、旋转、删除的一个简单的贴纸效果。上周因为学习了关于矩阵的映射,所以在这个View里面就会做得相对轻松一些。这周在运用到矩阵的基础上,也学会了去计算双指同时滑动时产生的向量。向量与旋转其实做这个View比较核心的地方就是 平移、缩放和旋转了。...原创 2019-08-27 14:43:18 · 276 阅读 · 0 评论 -
Android 每周一个小轮子之 学习仿网易云广场歌单的效果
这一篇Blog是学习自:Android自定义ViewGroup第十三式之移花接木小缘老哥太顶了,写的东西都巨棒,关注Ta很久了,我决定向他学习,学着去像他那样思考问题。建议各位老哥都去关注他!这次模仿的效果是网易云的广场歌单: 跟着大佬做的效果: 滑动的时候,三个View跟着移动,最上面的View会到下面去,跟着的View就会轮着上来。关于这个View剖析,陈小缘大佬已经写到很...原创 2019-08-16 17:31:22 · 550 阅读 · 1 评论 -
每周一个小轮子之 仿京东加载动画
JD加载动画是这样的:我做出来的是这样的:我把速度动画速度设置的很慢,以便以大家观察。中间的狗我不会画,所以我就画了个勾。那其实,除了图案,我已经几乎算实现其效果。这些效果如果认真观摩,其实一点都不难,那就是使用了路径动画。...原创 2019-08-09 10:34:56 · 440 阅读 · 0 评论 -
仿网易云音乐日推界面(监听AppBarLayout滑动+动态高斯模糊)
首先来看下日推界面的效果:网易云音乐日推界面的亮点就是在上拉的时候,banner页面逐渐模糊。字体透明度下降,最后左上角显示出“每日推荐”的字体。这个界面用户会觉得很清晰、便捷又不失美观(网易云音乐的AppUI设计是真的太顶)但是去模仿去做,其实又会遇到一些坑。比如说,这里明显使用了AppBarLayout,图片放在CollapsingToolbarLayout里,但是:下面的Recyc...原创 2019-08-02 14:31:08 · 5429 阅读 · 3 评论 -
小学CoordinatorLayout的交互
今天跟着大神的Blog来学一下CoordinatorLayout,因为有一个想要实现的效果。很久之前用过这个Layout,然后现在忘光了,又不想直接抄,这边直接写个blog来总结一下。包括用法和一些自定义的东西。学习blog为:CoordinatorLayout使用详解: 打造折叠悬浮效果Android开发之CoordinatorLayout打造滑动越界弹性放大图片效果Android ...原创 2019-07-26 17:03:15 · 690 阅读 · 1 评论 -
每周学一个小轮子之 可以缩放的ScalableView
开一个每周学一篇小轮子的blog,督促自己掌握一些别人写的好的轮子。希望自己再忙也要来坚持写(至少两周写一篇对自己来说有点质量的)。demo我也放在GitHub上了,希望老哥如果学到了可以点一个star,能有一个都是我学下去的动力了呜呜呜呜呜呜呜。GitHub的Demo地址~~~~这周学习的是一个可以支持 单指移动、双指缩放、双击缩放的 ScalableView。先上个效果图: 主...原创 2019-07-31 11:53:40 · 285 阅读 · 0 评论 -
Android 让Activity部分透明、并作出流畅的进场动画
让一个界面部分透明现在已经比较常见的了,比如网易云下面界面:“歌单详情”这个View大概占屏幕高的3/4,界面除了这个view其他部分则变成了半透明状态。怎么实现这个View呢?我自己主要研究了三套做法,并用实际开发项目的情况做了测试,作出下面的小结:把这个界面做成一个PopWindow优势:完全能够满足任意动画要求,其实算是最好解决Activity半透明方案了。劣势:PopWind...原创 2019-07-24 18:38:35 · 1216 阅读 · 0 评论 -
Android 触摸反馈一些注意的点
之前在自定义View的那本书上就已经学习了 onTouchEvent()、onGestureTouchEvent。因为触摸反馈的本质上就是在onTouchEvent/onGestruetTouchEvent去通过MotionEvent做事件处理。,所以需要更细致的去了解它们。所以这里专门开了个小结。这篇学习完后,我将会写一个可以缩放的自定义View。所以在学习之前一定要搞懂View对事件的分发...原创 2019-07-29 14:02:07 · 881 阅读 · 0 评论 -
Android自定义控件开发入门与实战(4)属性动画
实现一个路径动画在用户单击按钮时,把菜单弹出来,动画从小变到大,透明度从0到1,再次点击时,动画从大变小,透明度从1到0。这个动画最核心的就是计算出每个小button所移动的x、y距离。我们假设这些小球到黄球menu的直线与y轴的夹角为α比如说上面的小蓝球,它所移动的x、y距离应该是x = radius * sin(α)y = radius * cos(α)因为小球都是往黄球的x...原创 2019-04-30 16:58:18 · 436 阅读 · 0 评论 -
Android自定义控件开发入门与实战(3)View动画和属性动画
一个由远及近的动画 ScaleAnimation scaleAnim = new ScaleAnimation(1.0f,1.2f,1.0f,1.2f,Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f); scaleAnim.setFillAfter(true); ...原创 2019-04-26 16:48:30 · 963 阅读 · 0 评论 -
Android自定义控件开发入门与实战(2)View动画
第二章、视图动画就是View动画。包括Tween Animation(补间动画)和Frame Animation(逐帧动画)由5种类型组成:alphascaletranslaterotateset动画文件存放在 res/anim或者res/drawable下,访问时可以用R.anim.xxx或R.drawable.xxxx使用:tv = findViewById(R.id...原创 2019-04-22 20:48:28 · 1291 阅读 · 0 评论 -
Android自定义控件开发入门与实战(1)绘图基础
今天从leader那里拿到了启舰大神写的《自定义控件开发入门与实战》这本书,据说看完了,至少写起自定义view也不会慌。最重要的是多练,所以这本书基本设计到的我没有涉及过的控件开发(之前总结过过一些自定义View和动画的Blog,包括艺术探索那本书),我都会写出来~整本书总共500页,估计每天看+练至少要做2-3个月(快毕业了,一堆事情贼多),所以就慢慢更新吧。注:本书是笔记模式,书中如果有...原创 2019-04-18 14:10:29 · 1516 阅读 · 0 评论 -
Android自定义控件开发入门与实战(5)KeyFrame和ViewPropertyAnimator
KeyFrame的ofFloat和ofIntKeyframe除了ofFloat的方法,也有ofInt、ofObject这样的创建Keyframe实例的函数。其构造函数都差不多。(fraction+value或者fraction)可以通过 setFraction()和setValue来设置对应的进度和对应的值。Keyframe的插值器Keyframe可以让我们通过setInterpolat...原创 2019-05-20 20:48:22 · 671 阅读 · 0 评论 -
Android自定义控件开发入门与实战(6)路径动画
第五章、动画进阶前面几章所讲的内容其实都只是比较普通、简单的动画,这章开始学习较难、较为有深度、也比较可以实现更加炫酷效果的动画,通过PathMeasure和SVG动画来实现。PathMeasure实现路径动画PathMeasure是Android官方API,是之前第一张关于路径只是的一个扩展,十分的有用。PathMeasure可以计算出路径的总长、指定长度所对应的坐标等等路径信息。有两...原创 2019-05-25 19:20:36 · 327 阅读 · 0 评论 -
Android自定义控件开发入门与实战(7)SVG动画
SVG动画SVG动画就是可缩放矢量图形,由此知SVG是矢量图。和矢量图相对的是位图Bitmap,位图是一个一个像素点组成,当Bitmap方大时,可能会出现马赛克的状况,但是矢量图是由一个个点组成,经过数学计算利用直线和曲线绘制而成,无论如何放大都不会出现马赛克的现状。SVG相比Bitmap的好处为:SVG使用XML格式定义图形,可被非常多的工具读取和修改。SVG由点来储存,由计算机根据点...原创 2019-06-07 16:59:55 · 646 阅读 · 0 评论 -
Android自定义控件开发入门与实战(14)Bitmap
BitmapBitmap在绘图中是一个非常重要的格式。在Canvas中就保存着一个Bitmap对象,我们调用Canvas的各种绘图函数,最终还是会绘制到其中的Bitmap上的。View对应着一个Bitmap,而onDraw()函数中的Canvas参数就是通过这个Bitmap创建出来的。有关Bitmap与Canvas、View、Drawable的关系我们会在本章最末尾讲解。1、概述Bitma...原创 2019-06-18 21:01:46 · 299 阅读 · 0 评论 -
Android自定义控件开发入门与实战(11)Xfermode
第八章、混合模式混合模式之AvoidXfermode混合模式是Paint绘图中最难的部分,它能够将两张图片无缝结合,实现类似PS中两张图的融合效果。在Android中,混合模式主要是通过Paint类中的Xfermode setXfermode(Xfermode xfermode)函数来实现的,它的参数Xfermode是一个空类,我们主要靠它的子类来实现不同的功能。派生自Xfermode的子...原创 2019-06-14 13:51:13 · 1951 阅读 · 0 评论 -
Android自定义控件开发入门与实战(8)Paint基础
第六章、Paint的基本使用硬件加速GPU为“图形处理器”,是专门处理图形任务而产生的芯片。在GPU出现之前,处理图片的一直是CPU,CPU从设计上是尽可能快的完成一项任务,但是对于需要频繁计算的图片、多并发线程下的图片的存取,CPU不能及时响应的话屏幕就会显得很卡顿。所以自带处理器和存储器专门处理多媒体计算的GPU应运而生。对于Android,API 11之前没有GPU这个概念,在API...原创 2019-06-09 17:12:20 · 786 阅读 · 0 评论 -
Android自定义控件开发入门与实战(12)Canvas
第九章、Cnavas与图层获取Canvas对象的方法方法一:重写onDraw()、dispatchDraw()函数一般在自定义View时,我们都会重写onDraw()、dispatchDraw()函数。先来看下他们的定义: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas)...原创 2019-06-15 16:15:30 · 811 阅读 · 0 评论 -
Android自定义控件开发入门与实战(9)贝济埃曲线、setShadowLayer阴影、BluMaskFilter发光效果
第七章、绘图进阶贝济埃曲线贝济埃曲线是一个强大的工具,它能利用moveTo LineTo连接的生硬的路径变得平滑,也能够实现很多炫酷的效果,比如水波纹等等。贝济埃曲线在数学的数值分析领域中,是计算机图形学中相当重要的参数曲线,更高维度的广泛化贝济埃曲线称为被贝济埃曲面。贝济埃曲线的公式一阶贝济埃曲线B(t) = (1-t)P0+tP1 , t∈[0,1]B(t)是值(即形成的轨迹)...原创 2019-06-11 10:32:21 · 924 阅读 · 0 评论 -
Android自定义控件开发入门与实战(13)Android画布
第十章、Android画布这一章有点长,可能要分3-5篇blog来讲。在之前章节提过画布的几个获取方法。除了重写系统的onDraw()、dispatchDraw()方法,还可以通过下面方法获得画布:通过Bitmap创建。通过SurfaceView的SurfaceHolder.lockCanvas()函数获取。另外,我们也可以通过创建Drawable对象,然后将画好的Drawable对...原创 2019-06-17 11:54:09 · 386 阅读 · 0 评论 -
Android自定义控件开发入门与实战(17)手势检测
第十三章、控件高级属性1、GestureDetector手势检测用户触摸屏幕的时候会产生很多手势,我们可以用onTouch()来监听,但是该函数太过简单,如果需要处理很复杂的手势,使用这个接口就会产生很多麻烦。而SDK提供的GestureDetector类对外提供了两个接口(OnGestureListener 、OnDoubleTapListener)和一个外部类(SimpleOnGestu...原创 2019-06-25 11:25:24 · 376 阅读 · 0 评论 -
Android自定义控件开发入门与实战(10)Shader
Shader与BitmapShader本篇blog内容和hencoder学习自定义view(1)部分内容相似,有些知识就直接跳过了。Shader是着色器,是用来给空白图形上色的。当设置了Shader后,Paint就不会使用setColor或者setARGB里面的颜色了,而是直接使用Shader中的方案。public Shader setShader(Shader shader)Shad...原创 2019-06-12 10:31:24 · 292 阅读 · 0 评论 -
Android自定义控件开发入门与实战(15)SurfaceView
SurfaceView原创 2019-06-23 14:46:29 · 1672 阅读 · 0 评论 -
Android自定义控件开发入门与实战(16)封装控件
第十二章、封装控件实习以来已经写许多个自定义控件了,所以这章有很多知识我就不想写了。如果有人想了解就自己上网找吧。1、自定义属性与自定义Style不讲了,就是给自定义的控件添加自定义属性。步骤大概就是在 attrs下添加 <declare-styleable>标签,指明对应的控件,然后在下面声明属性的名称和类型。在xml中就可以在使用控件时使用该自定义属性。代码在该控件...原创 2019-06-23 18:03:38 · 677 阅读 · 0 评论 -
hencoder学习自定义view(1)
从hencoder上学习关于 paint的知识HenCoder Android 开发进阶: 自定义 View 1-2 Paint 详解关于Paint,有四个最重要的API,分别是颜色效果drawText()相关初始化1、颜色canvas绘制的内容对颜色有三种处理:1.1、基本颜色...原创 2019-04-11 16:59:20 · 344 阅读 · 0 评论