关于自定义控件,之前就写过一篇自定义控件,上图下字的Button,图片任意指定大小,但是使用效果还是让人感觉不幸福,这次索性彻彻底底地对自定义控件做一次彻彻底底的总结. 我会花4篇博客来介绍自定义控件,由潜入深慢慢学: 工具类:ViewHelper(View处理常用方法封装) 安卓自定义控件(一)Canvas.Paint.Shader.Xfermode 安卓自定义控件(二)BitmapShader.ShapeDrawable.Shape 安卓自定义控件(三)实现自定义View 4.onLayou…
前面两篇博客,把View绘制的方法说了一下,但是,我们只在onDraw里面做文章,控件都是直接传入一个Context,还不能在布局文件里使用自定义View.这一篇博客,就不再讲绘制,在我们原先的基础上,真正实现一个可用的View. 工具类:ViewHelper(View处理常用方法封装) 安卓自定义控件(一)Canvas.Paint.Shader.Xfermode 安卓自定义控件(二)BitmapShader.ShapeDrawable.Shape 安卓自定义控件(三)实现自定义View 方案:…
第一篇博客中,我已经Canvas.Paint.Shader.Xfermode这些对象做了总结,而现在这篇文章主要介绍BitmapShader位图渲染,Xfermode如何实际应用,还有形状的绘制.不过本文还是只重写onDraw一个方法,像OnMeasure.OnLayout暂时不去研究,工欲善其事必先利其器嘛,先把可能用到的东西研究清楚再说. 有什么其它问题以及建议,欢迎留言. 工具类:ViewHelper(View处理常用方法封装) 安卓自定义控件(一)Canvas.Paint.Shader.…
Canvas,Paint 1.在android 绘图但中经常要用到Canvas和Paint类,Canvas好比是一张画布,上面已经有你想绘制图画的轮廓了,而Paint就好比是画笔,就要给Canvas进行添色等操作. 这两个类通常都是在onDraw(Canvas canvas)方法中用的. 2.Bitmap:代表一张位图,BitmapDrawable里封装的突变就是一个Bitmao对象 3.Canvas里面有一些例如: drawArc(参数) 绘制弧 drawBitmao(Bitmap bitma…
转载请注明出处:王亟亟的大牛之路 从最開始的白页面等待,到后来的进度条告知用户.到如今的WebBO/微信这样的先下缩略图点击才又一次下大图的方式,我们开发人员对用户感知的注意度越来越高.昨天刷微博的时候看到他们是用一个灰色转圈圈的实现,所以就萌生的今天要做的内容的启示(我是在不知道给这样的实现取什么名字.就写了一大堆.感觉在哪见过相似的可是,忘了出自于哪了) 先上下效果: GIF软件继续把我的效果给吃了..大家能够自己跑一下,看效果. HOW to do? 1.我们的图片来自于网络,假设是本地,…
图形绘制简介        Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.大部分2D使用的api都在android.graphics和android.graphics.drawable包中.他们提供了图形处理相关的Canvas.ColorFilter.Point.RetcF等类,还有一些动画相关的AnimationDrawable.BitmapDrawable.TransitionDrawable等.       以图形…
对于自定义控件的意义不言而喻,所以对它的深入研究是很有必要的,前些年写过几篇关于UI效果的学习过程,但是中途比较懒一直就停滞了,而对于实际工作还是面试来说系统深入的了解自定义控件那是很有必要的,所以接下来会不断的去记录自己学习关于自定义控件一些心路历程,重点是要深入剖析其机制的原理. 而从最基础Canvas的绘制开始练习,没有扎实的基础何谈深入呢?而这里最终会实现一个人的笑脸的样子来学一些基础的canvas的用法,毕境它的用法太多太多,不过未来不会只满足于这片使用的,而是会不断的进行丰富,下面先…
一种是直接对Bitmap的像素进行操作,如:叠加.边框.怀旧.(高斯)模糊.锐化(拉普拉斯变换). Bitmap.getPixels(srcPixels, 0, width, 0, 0, width, height); newR = (int) (pixR * alpha + layR * (1 - alpha));    newR = Math.min(255, Math.max(0, newR));    ...    srcPixels[pos] = Color.argb(newA, ne…
1.平移 //构造两个画笔,一个红色,一个绿色 Paint paint_green = generatePaint(Color.GREEN, Paint.Style.STROKE, 3); Paint paint_red = generatePaint(Color.RED, Paint.Style.STROKE, 3); //构造一个矩形 Rect rect1 = new Rect(0,0,400,220); //在平移画布前用绿色画下边框 canvas.drawRect(rect1, pain…
之前去面试,人家说,我这个事件拦截机制写得太少了,还有一个MotionEvent没写,这个确实也很重要,后来我考虑了一下,决定将这篇文章放到自己定义控件里. 先简单再提一下事件分发,事件分发和拦截主要涉及3个方法: interceptTouchEvent()这个方法,顾名思义是我们的拦截方法,返回true事件就不会向下传递: onTouchEvent()就是触摸事件,返回true就表明当前层消费了这次事件,它会阻止事件向上传递: 而dispatchTouchEvent()是事件分发的方法,它的s…