自定义View基础
来源:互联网 发布:cf端游刷枪软件安卓版 编辑:程序博客网 时间:2024/06/06 04:54
一,自定义View概述
定义:系统内部的控件无法满足用户需求时,需要用户自己去创建相应的UI布局
二,自定义View的分类
1,使用现有的控件组合成新的控件
2,继承已有的控件创建新的控件
3,直接继承自View类创建新的控件
4,直接继承自ViewGroup类创建的新的控件
三,自定义View的作用
创建和系统UI不一样的UI控件
四,使用现有的控件组合成新的控件
五,相关的绘制类
Canvas 画布
通过该类提供的方法,可以绘制各种图形,如,矩形,圆形,和线条等,通常情况下,要在Andaroid中绘图,需要先创建一个继承自View类的视图,并且在该类中重写它的onDraw(Canvas canvas)方法,然后在显示绘图的Activity中添加该视图
Paint 画笔
Paint类代表画笔,用来描述图形的颜色和风格,如线宽,颜色,透明度,和填充效果等信息,使用Paint时,需要先创建该类的对象,这可以通过该类提供的构造方法来实现。通常情况下,只需要使用无参数的构造方法来创建一个使用默认设置的Paint对象:
方法
描述
setColor(int color)
用于设置颜色,参数color可以通过Color类提供的颜色常量指定,也可以通过Color.rgb(int red,int green,int blue)方法指定
setAlpha(int a)
用于设置透明度,值为0~255之间的整数
setAntiAlias(boolean aa)
用于指定是否使用抗锯齿功能,如果使用会使绘图速度变慢
setDither(boolean dither)
用于指定是否使用图像抖动处理,如果使用会使图像颜色更加平滑和饱满,更加清晰
setShader(Shader shader)
用于设置渐变,可以使用LinearGradient(线性渐变)、RadialGradient(径向渐变)或者SweepGradient(角度渐变)
setShadowLayer(float radius, float dx, float dy, int color)
用于设置阴影,参数radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色。如果参数radius的值为0,那么将没有阴影
setStrokeCap(Paint.Cap cap)
用于当画笔的填充样式为STROKE或FILL_AND_STROKE时,设置笔刷的图形样式,参数值可以是Cap.BUTT、Cap.ROUND或Cap.SQUARE。主要体现在线的端点上
setStrokeJoin(Paint.Join join)
用于设置画笔转弯处的连接风格,参数值为Join.BEVEL、Join.MITER或Join.ROUND
setStrokeWidth(float width)
用于设置笔触的宽度
setStyle(Paint.Style style)
用于设置填充风格,参数值为Style.FILL、Style.FILL_AND_STROKE或Style.STROKE
setTextAlign(Paint.Align align)
用于设置绘制文本时的文字对齐方式,参数值为Align.CENTER、Align.LEFT或Align.RIGHT
setTextSize(float textSize)
用于设置绘制文本时的文字的大小
setFakeBoldText(boolean fakeBoldText)
用于设置是否为粗体文字
setXfermode(Xfermode xfermode)
用于设置图形重叠时的处理方式,例如合并、取交集或并集,经常用来制作橡皮的擦除效果
public
class
MyView
extends
View
//声明画笔
private
Paint paint;
public
MyView(Context context) {
super
(context);
initPaint();
}
public
MyView(Context context, AttributeSet attrs) {
super
(context, attrs);
initPaint();
}
public
MyView(Context context, AttributeSet attrs,
int
defStyleAttr) {
super
(context, attrs, defStyleAttr);
initPaint();
}
/**
* 初始化画笔
*/
private
void
initPaint() {
paint =
new
Paint();
}
@Override
protected
void
onDraw(Canvas canvas)
//重置画笔
paint.reset();
//设置画笔的颜色
paint.setColor(Color.RED);
// //设置填充样式为填充(默认)
// paint.setStyle(Paint.Style.FILL);
// //设置填充样式为描边
// paint.setStyle(Paint.Style.STROKE);
//设置画笔的粗细
paint.setStrokeWidth(
20
);
//设置坑锯齿
paint.setAntiAlias(
true
);
//设置透明度
paint.setAlpha(
100
);
//画点--参数,点XY坐标,画笔
canvas.drawPoint(
100
,
100
, paint);
//坐标数组有四个点:(10,10)、(100,100),(200,200),(400,400))
float
[]pts= {
10
,
10
,
100
,
100
,
200
,
200
,
400
,
400
};
//多个点--参数,坐标数组,跳过的数值个数,绘制的数值个数,画笔
//(绘制从的三个数值开始往后的4个数值--第二和第三个点)
canvas.drawPoints(pts,
2
,
4
, paint);
// canvas.drawPoints(pts, paint);
//画线--参数,开始XY坐标,结束XY坐标,画笔
canvas.drawLine(
10
,
10
,
300
,
10
, paint);
//坐标数组有四个点:(10,10)、(100,100),(200,200),(400,400)),两两连成一条直线
float
[]ptss={
10
,
10
,
100
,
100
,
200
,
200
,
400
,
400
};
//画多条直线--参数,坐标数组,画笔
canvas.drawLines(ptss, paint);
//new一个矩形类--参数,矩形左上角XY坐标,矩形右下角XY坐标
RectF oval=
new
RectF(getWidth()/
2
-
150
,getHeight()/
2
-
150
,getWidth() /
2
+
150
, getHeight()/
2
+
150
);
//画矩形--参数,矩形,画笔
canvas.drawRect(oval, paint);
// canvas.drawRect(getWidth()/2-150,getHeight()/2-150,getWidth() / 2 + 150, getHeight()/2+150, paint);
//画圆--参数圆心XY坐标,半径,画笔
canvas.drawCircle(getWidth() /
2
, getHeight() /
2
,
150
, paint);
//画椭圆--参数,外接矩形,画笔
canvas.drawRect(oval, paint);
//画圆形矩形--参数,矩形,生成圆角的椭圆的X轴半径,生成圆角的椭圆的Y轴半径,画笔
canvas.drawRoundRect(oval,
20
,
10
, paint);
//画弧度--参数,外接矩形,弧开始的角度(以X轴正方向为0度),弧持续的角度,是否有弧的两边,画笔
canvas.drawArc(oval,
0
,
90
,
true
, paint);
//设置字体大小
paint.setTextSize(
50
);
//写文本--参数,文本内容,文本起始位置XY坐标(或者每个字符的位置的坐标数组),画笔
canvas.drawText(
"文本"
, (getWidth() /
2
), (getHeight() /
2
), paint);
//重画
this
.postInvalidate();
- Android自定义View基础
- 自定义View基础
- android--View自定义基础
- android自定义View基础
- 自定义 View 基础篇
- 自定义View-基础
- 自定义View基础-坐标系
- 自定义View基础
- 自定义View控件---基础
- Android 自定义View(基础)
- 自定义view基础
- Android自定义View基础
- 自定义View基础
- 自定义View基础
- 自定义View基础入门
- 自定义view基础入门
- 自定义View常用基础
- 自定义View 基础, bitmap
- PATA1086
- leetcode-13-roman to integer
- 【OpenGL】Shader实例分析(五)- 边缘检测
- 欢迎使用CSDN-markdown编辑器
- bzoj 2299: [HAOI2011]向量 数学
- 自定义View基础
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
- loadrunner12.50安装说明
- Android-Cloud-TagView-Plus集合到自定义dialog遇到的问题
- AngularJS 运行机制详解
- R boxplot
- DDR2 PCB布线设计
- 【OpenGL】Shader实例分析(六)- 卡牌特效
- iOS PhotoBrowser - ZLThumbnailViewController 获取900张以上图片内存警告闪退的问题