Android自定义View

Java基础

浏览数:23

2019-8-22

其实自定义view就是再定义一个java文件,这个文件继承view或viewgroud,然后通过定义大小,画笔,画布来自定义一个新view。然后在layout布局文件中使用。

方法

可以看到

其中常用的构造函数有两种,(context,attributeset)(context)。其中attributest包含了自定义view大小的全部信息。我们一般还要要在构造函数中初始化画笔(paint)。画笔的FILL是填充类型,STROKE是描边,FILL_AND_STROKE是描边和填充。

初始化画笔

onMeasure():测量view的大小,有两个参数。其中可以通过MeasureSpec.getSize.geMode来获取控件的大小和模式(占两位二进制),由于有两个参数用的代码重复率很高,所以另外写一个函数。 模式有三种模式:EXACTLY:父布局,已经确定大小,AT_MOST子布局,确定了最大值。UNSPECIFIED默认布局。    最后把确定的大小通过setMeasureDimension(w,h)重置大小。

onSizeChanged:确定view的大小

onLayout:确定子view的位置(viewGroup)

onDraw:绘制内容:利用画布和笔来绘制内容,画布用参数自带的canvas!!!

Canvas.drawPoint() .drawLine()都差不多一样,线是起点和终点的坐标

点和线的绘制

需要描矩形的三个:矩形,椭圆,圆弧分别对应drawRect(rect.paint),drawOval(rect.paint),drawArc(rect.start.end.center.paint)。其中Rect代表的是int型,RectF代表的是float型。矩形还可以绘制圆角矩形drawRoundRect(rect.x.y.paint)

绘制矩形的几种方法

drawCircle(x.y.r.paint)绘制圆通过一个中心和半径来确定

drawText():根据左下角开始绘制。

canvas.translate(x.y)将画布中心平移

canvas.scale(sx.sy) .scale(sx.sy.x.y) 其中0.5f代表缩放一半,-0.5f代表缩放一半后向时钟旋转180度。

scale案例

canvas.rotate(de) .rotate(de.x.y)

rotate

canvas.skew(fx.fy)其中fx.fy是tan旋转角度的值

skew

画布是由很多图层构成的

save和restore

位图是由像素一个一个组合而成,矢量图是由数学方程组合而成。

drawPicture:矢量图

使用Picture要关闭硬件加速器:android:hardwareAccelerated=”false”

Picture:录制画布的内容并存起来,再下次要用的时候直接调用。方法有录制时的beginRecording(w.h),endRecording(),绘制draw(c),

Picture的用法

Picture的表示有三种方式:1.自己的draw(can)方法,2.canvas的drawPicture(pic) drawPicture(pic.rect)方法,3.将其包装成PictureDrawable,使用起draw(can)方法。          其中自己的draw对canvas有影响和操作性弱。2和3不会对canvas有影响,,且操作性强。

// 包装成为Drawable的方法  PictureDrawable drawable = new PictureDrawable(mPicture);                            // 设置绘制区域drawable.setBounds(0,0,250,mPicture.getHeight());                                                              // 绘制drawable.draw(canvas);

drawBitmap:位图

获取Bitmap的三种方法:Bitmap.BitmapDrawable.BitmapFactory后两种是从资源文件 内存卡 网络等地方获取一张图片并转换为内容不可变的Bitmap。推荐使用BitmapFactory。

BitmapFactory转换成Bitmap的三种方法:BitmapFactory.decodeStream(st) decodeResource(Context.getResource.R) decodeFile(path)

drawBitmap的三种方法

第二种中是图片距离坐标原点的距离。第三种中src是绘制区域,dst是显示区域。

drawBitmap三种方法

作者:ofLJli