自定义控件

1.相关说明

View这个类代表用户界面组件的基本构建块。View在屏幕上占据一个矩形区域,并负责绘制和事件处理。View是用于创建交互式用户界面组件(按钮、文本等)的基础类。它的子类ViewGroup是所有布局的父类,它是一个可以包含其他view或者viewGroup并定义它们的布局属性的看不见的容器。

实现一个自定义View,你通常会覆盖一些framework层在所有view上调用的标准方法。你不需要重写所有这些方法。事实上,你可以只是重写onDraw(android.graphics.Canvas)。

1.1方法

构造

Constructors

有一种形式的构造方法是使用代码创建的时候调用的,另一种形式是View被布局文件填充时被调用的。第二种形式应该解析和使用一些属性定义在布局文件中

onFinishInflate()

当View和他的所有子控件被XML布局文件填充完成时被调用。(这个方法里面可以完成一些初始化,比如初始化子控件)

布局

onMeasure(int, int)

当决定view和他的孩子的尺寸需求时被调用(也就是测量控件大小时调用)

onLayout(boolean, int, int, int, int)

确定View在父布局中位置

onSizeChanged(int, int, int, int)

当view大小发生变化时调用

绘制

onDraw(android.graphics.Canvas)

当视图应该呈现其内容时调用(绘制

事件处理

onKeyDown(int, KeyEvent)

按键时被调用

onKeyUp(int, KeyEvent)

按键被抬起时调用

onTouchEvent(MotionEvent)

触摸屏幕时调用

焦点

onFocusChanged(boolean, int,  android.graphics.Rect)

获取到或者失去焦点是调用

onWindowFocusChanged(boolean)

窗口获取或者失去焦点是调用

Attaching

onAttachedToWindow()

当视图被连接到一个窗口时调用

onDetachedFromWindow()

当视图从窗口分离时调用

onWindowVisibilityChanged(int)

当View的窗口的可见性发生改变时调用

1.2 onDraw

方法:

protected void onDraw(Canvas canvas) {}

Canvas

绘画基本都是靠drawXXX()方法来完成的,在这些方法中,很多时候都需要用到paint类型的参数

eg

public voiddrawText(@NonNullStringtext,floatx,floaty,@NonNullPaintpaint) {

native_drawText(mNativeCanvasWrapper,text,0,text.length(),x,y,paint.mBidiFlags,

paint.getNativeInstance(),paint.mNativeTypeface);

}

2.Canvas

2.1.paint

图形绘制相关

public void set(Paint src)根据已有画笔的属性进行赋值

public void setColor(int color)设置颜色

public void setAlpha(int alpha)设置透明度,alpha为透明度,取值范围为0~255,数值越小越透明

public void setARGB(int a, int r, int g,int b)设置透明度和颜色,a代表透明度,r,g,b代表颜色值

public void setAntiAlias(boolean aa)设置是否使用抗锯齿功能,比较耗资源,减慢绘制速度

public void setDither(boolean dither)设定是否使用图像抖动,如true,绘制出来的图片颜色更饱满、清晰

public void

setStyle(android.graphics._Original_Paint.Style style)设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE

当style为FILL时,绘制是填充面,FILL是Paint默认的style;

当style为STROKE时,绘制的是图形的轮廓线;

当style为FILL_AND_STROKE时,同时绘制填充面和轮廓线,不过这种情况用的不多,因为填充面和轮廓线是用同一种颜色绘制的,区分不出轮廓线的效果。

public void setStrokeCap(Cap cap)

当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式Cap.ROUND,或方形样式Cap.SQUARE

public void setStrokeWidth(float width)当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度

文字绘制相关:

public void setTextSize(float textSize)设置文字大小

public void setTextScaleX(float scaleX)设置文字x轴的缩放比例,可以实现文字的拉伸效果

public void setTextSkewX(floatskewX)设置文字倾斜弧度

public void setUnderlineText(boolean

flag)设置文字下划线效果

public void setStrikeThruText(boolean

flag)设置删除线效果

public Typeface setTypeface(Typeface

typeface)设置字体风格

public void setTextAlign(android.graphics._Original_Paint.Align

align)设置文字的对齐方向

其中有两个属性设置需要作说明:

1、public Typeface setTypeface(Typeface typeface),接收参数为Typeface对象,在Typeface.java类中,比较简单的,有defaultFromStyle方法返回Typeface对象:

public static TypefacedefaultFromStyle(int style) {}

2、public void setTextAlign(android.graphics._Original_Paint.Align align)设置文字的对齐方向,接收的参数为Paint的内部枚举类Align的值,可选LEFT、CENTER和RIGHT。

2.2.Canvas属性与方法

前置:设置ARGB、颜色填充画布:drawARGB

画点:canvas.drawPoint

画直线:drawLine(floatstartX, float startY, float stopX, float stopY, Paint paint)

画圆:drawCircle(floatcx, float cy, float radius, Paint paint)

绘制矩形:drawRect(floatleft, float top, float right, float bottom, Paint paint)

绘制圆角矩形:drawRoundRect(RectFrect, float rx, float ry, Paint paint)

绘制一个区域的内切圆或椭圆(视所定义的矩形而定):

绘制弧形区域:drawArc(RectFoval, float startAngle, float sweepAngle, boolean useCenter,Paint paint)

绘制路径— Path的使用:drawPath(mPath,paint);Path

绘制文本:drawText(Stringtext, float x, float y, Paint paint)

按照指定的路径绘制文本:drawTextOnPath(Stringtext, Path path, float hOffset, float vOffset, Paint paint)

3.自定义属性

步骤:

  1. 名称空间 xmlns:myspace=http://schemas.android.com/apk/res-auto
  2. 使用:myspace:mTextSize="25sp"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值