Android自定义View—API
Paint
- 
    reset() 
 重置Paint。
- 
    setFlags(int flags) 
 设置一些标志,比如抗锯齿,下划线等等。
- 
    setAntiAlias(boolean aa) 
 设置抗锯齿,如果不设置,加载位图的时候可能会出现锯齿状的边界,如果设置,边界就会变的稍微有点模糊,锯齿就看不到了
- 
    setDither(boolean dither) 
 设置是否抖动,如果不设置感觉就会有一些僵硬的线条,如果设置图像就会看的更柔和一些,
- 
    setLinearText(boolean linearText) 
 这个是文本缓存,设置线性文本,如果设置为true就不需要缓存
- 
    setSubpixelText(boolean subpixelText) 
 设置亚像素,是对文本的一种优化设置,可以让文字看起来更加清晰明显,可以参考一下PC端的控制面板-外观和个性化-调整ClearType文本
- 
    setUnderlineText(boolean underlineText) 
 设置文本的下划线
- 
    setUnderlineText(boolean underlineText) 
 设置文本的下划线
- 
    setStrikeThruText(boolean strikeThruText) 
 设置文本的删除线
- 
    setFakeBoldText(boolean fakeBoldText) 
 设置文本粗体
- 
    setFilterBitmap(boolean filter) 
 对位图进行滤波处理,如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示
- 
    setColor(int color) 
 设置画笔颜色
- 
    setAlpha(int a) 
 设置画笔的透明度[0-255],0是完全透明,255是完全不透明
- 
    setARGB(int a, int r, int g, int b) 
 设置画笔颜色,argb形式alpha,red,green,blue每个范围都是[0-255],
- 
    setStrokeWidth(float width) 
 画笔样式为空心时,设置空心画笔的宽度
- 
    setStrokeMiter(float miter) 
 当style为Stroke或StrokeAndFill时设置连接处的倾斜度,这个值必须大于0,看一下演示结果
- 
    setShader(Shader shader) 
 设置着色器,用来给图像着色的,绘制出各种渐变效果,有BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient几种
- 
    setColorFilter(ColorFilter filter) 
 设置画笔颜色过滤器,有ColorMatrixColorFilter,LightingColorFilter,PorterDuffColorFilter几种,这个以后再单独分析
- 
    setXfermode(Xfermode xfermode) 
 设置图形重叠时的显示方式
- 
    setPathEffect(PathEffect effect) 
 设置绘制路径的效果,有ComposePathEffect,CornerPathEffect,DashPathEffect,DiscretePathEffect,PathDashPathEffect,SumPathEffect几种,以后在单独分析
- 
    setMaskFilter(MaskFilter maskfilter) 
 对图像进行一定的处理,实现滤镜的效果,如滤化,立体等,有BlurMaskFilter,EmbossMaskFilter几种
- 
    setTypeface(Typeface typeface) 
 设置字体样式,可以是Typeface设置的样式,也可以通过Typeface的createFromAsset(AssetManager mgr, String path)方法加载样式
- 
    setShadowLayer(float radius, float dx, float dy, int shadowColor) 
 设置阴影效果,radius为阴影角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色。注:在用该方法之前需要调用setLayerType( LAYER_TYPE_SOFTWARE , null);关闭硬件加速
- 
    setTextLocale(Locale locale) 
 设置地理位置,比如显示中文,日文,韩文等,默认的显示Locale.getDefault()即可,
- 
    setElegantTextHeight(boolean elegant) 
 设置优雅的文字高度,这个设置可能会对FontMetrics产生影响
- 
    setTextSize(float textSize) 
 设置字体大小
- 
    setTextScaleX(float scaleX) 
 设置字体的水平方向的缩放因子,默认值为1,大于1时会沿X轴水平放大,小于1时会沿X轴水平缩小
- 
    setTextSkewX(float skewX) 
 设置文本在水平方向上的倾斜,默认值为0,推荐的值为-0.25,
- 
    setLetterSpacing(float letterSpacing) 
 设置行的间距,默认值是0,负值行间距会收缩
- 
    setFontFeatureSettings(String settings) 
 设置字体样式,可以设置CSS样式
- 
    measureText(char[] text, int index, int count),measureText(String text, int start, int end),measureText(String text),measureText(CharSequence text, int start, int end) 
 测量字体的长度
- 
    breakText(char[] text, int index, int count,float maxWidth, float[] measuredWidth),breakText(CharSequence text, int start, int end,boolean measureForwards, floatmaxWidth, float[] measuredWidth),breakText(String text, boolean measureForwards,float maxWidth, float[] measuredWidth) 
 剪切显示,就是大于maxWidth的时候只截取指定长度的显示
- 
    getTextWidths(char[] text, int index, int count,float[] widths),getTextWidths(CharSequence text, int start, int end, float[] widths),getTextWidths(String text, int start, int end, float[] widths),getTextWidths(String text, float[] widths) 
 提取指定范围内的字符串,保存到widths中
- 
    getTextPath(char[] text, int index, int count, float x, float y, Path path),getTextPath(String text, int start, int end, float x, float y, Path path) 
 获取文本绘制的路径,提取到Path中
- 
    getTextBounds(String text, int start, int end, Rect bounds) ,getTextBounds(char[] text, int index, int count, Rect bounds) 
 得到文本的边界,上下左右,提取到bounds中,可以通过这计算文本的宽和高
Canvas
- 
    translate(100, 50) 平移 
 参数1: 向X轴方向移动100距离
 参数2: 向Y轴方向移动50距离
- 
    canvas.scale(2, 4) 缩放 
 在X轴方向放大为原来2倍,Y轴方向方大为原来的4倍
 参数1: X轴的放大倍数
 参数2: Y轴的放大倍数
 canvas.scale(2, 4,100,100)
 在X轴方向放大为原来2倍,Y轴方向方大为原来的4倍
 参数1: X轴的放大倍数
 参数2: Y轴的放大倍数
 参数3: 原点X坐标
 参数4: 原点Y坐标
- 
    canvas.rotate(30) 旋转 
 原点为中心,旋转30度(顺时针方向为正方向 )
 参数: 旋转角度
 canvas.rotate(30,100,100)
 以(100,100)为中心,旋转30度,顺时针方向为正方向
 参数: 旋转角度
- 
    canvas.drawText(“开始写字了!”,50, 50, p) 画文字 
 参数2:文本的x轴的开始位置
 参数2:文本Y轴的结束位置
 参数3:画笔对象
 canvas.drawText(“开始写字了!”,2,5, 50, 50, p)
 参数2:要从第几个字开始绘制
 参数3:要绘制到第几个文字
 参数4:文本的x轴的开始位置
 参数5:文本Y轴的结束位置
 参数6:画笔对象
 canvas.drawTextOnPath(“1234567890101123123”, path, 0, -50, p)
 参数2:路径
 参数3:距离路径开始位置的偏移量
 参数4:距离路径上下的偏移量(可以为负数)
 参数5:画笔对象
- 
    canvas.drawCircle(200, 200, 100, p) 画圆 
 参数1:圆心X
 参数2:圆心Y
 参数3:半径R
 参数4:画笔对象
- 
    canvas.drawLine(100, 100, 300, 300, p) 画线 
 参数1:startX
 参数2:startY
 参数3:stopX
 参数4:stopY
 参数5:画笔对象
 canvas.drawLines(new float[]{100,100,200,200,200,100,300,100}, p)
 同时绘制多条线。
 参数1:float数组:每四个一组为一条线。最后不足四个,就忽略那些值。
 参数2:画笔对象
- 
    RectF oval = new RectF(150, 200, 500, 400); canvas.drawOval(oval, p) 画椭圆 
 参数1:float left
 参数2:float top
 参数3:float right
 参数4:float bottom
- 
    canvas.drawArc(oval, 20, 180, false, p) 画弧度 
 参数1:RectF对象。
 参数2:开始的角度。(水平向右为0度顺时针反向为正方向)
 参数3:扫过的角度
 参数4:是否和中心连线
 参数5:画笔对象
- 
    canvas.drawRect(100,100, 200, 200, p) 画矩形 
 参数1:float left
 参数2:float top
 参数3:float right
 参数4:float bottom
 canvas.drawRoundRect(oval3, 20, 5, p) 画圆角矩形
 RectF oval3 = new RectF(80, 260, 200, 300);// 设置个新的长方形
 canvas.drawRoundRect(oval3, 20, 5, p);//第二个参数是x半径,第三个参数是y半径
- 
    canvas.drawPath(path, p) 画多边形 
 Path类封装复合(多轮廓几何图形的路径 由直线段*、二次曲线,和三次方曲线,也可画以油画。drawPath(路径、油漆),要么已填充的或抚摸(基于油漆的风格),或者可以用于剪断或画画的文本在路径。
 Path path = new Path(); 路径对象
 path.moveTo(80, 200); 此点为多边形的起点
 path.lineTo(120, 250);
 path.lineTo(80, 250);
 //…. 可以添加多个点。构成多边形
 path.close(); // 使终点和起点链接,构成封闭图形
 canvas.drawPath(path, p);
- 
    canvas.drawPath(path2, p) 画贝塞尔曲线 
 p.setStyle(Style.STROKE);
 Path path2=new Path();
 path2.moveTo(100, 100);//设置Path的起点
 path2.quadTo(300, 100, 400, 400); //设置贝塞尔曲线的控制点坐标和终点坐标。
 参数1、2:x1,y1为控制点的坐标值,参数3、4:x2,y2为终点的坐标值
 path2.quadTo(500, 700, 800, 800);
 canvas.drawPath(path2, p);//画出贝塞尔曲线
- 
    canvas.drawPoint(60, 390, p) 画一个点 
 参数1、2:点的x、y坐标
 canvas.drawPoints(new float[]{60,400,65,400,70,400}, p) 画多个点
 参数1:多个点,每两个值为一个点。最后个数不够两个的值,忽略。
- 
    canvas.drawBitmap(bitmap, 200,300, p) 画图片 
 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
 canvas.drawBitmap(bitmap, 200,300, p);
 参数1:bitmap对象
 参数2:图像左边坐标点
 参数3:图像上边坐标点
Path
- 
    moveTo 
 moveTo表示将绘制点移动到某一个坐标处,该方法并不会进行绘制,主要是用来移动画笔。默认情况下起始坐标位于(0,0)点,我们可以手动调整默认位置。
- 
    lineTo 
 lineTo表示绘制一条直线,参数表示目标坐标如下:
 Path path = new Path();
 path.lineTo(getResources().getDimensionPixelSize(R.dimen.dot1x), getResources().getDimensionPixelSize(R.dimen.dot1x));
 canvas.drawPath(path, paint);
- 
    quadTo 
 quadTo可以用来绘制一个带控制点的曲线,说白了,其实就是贝塞尔曲线。如下:
 Path path = new Path();
 path.moveTo(0, 300);
 path.quadTo(150, 0, 300, 300);
 canvas.drawPath(path, paint);
- 
    cubicTo 
 cubicTo可以用来绘制具有两个控制点的贝塞尔曲线,代码如下: Path path = new Path();
 path.moveTo(300, 0);
 path.cubicTo(0, 150, 300, 450, 0, 600);
 canvas.drawPath(path, paint);
- 
    arcTo 
 artTo用来绘制一段圆弧,实际上是截取圆或者椭圆的一部分,比如下面一段代码:
 Path path = new Path();
 RectF oval = new RectF(0, 0, 300, 300);
 path.arcTo(oval, 0, 90);
 canvas.drawPath(path, paint);
- 
    addArc、addRoundRect、addOval、addRect、addCircle 
 addArc,添加一个圆弧到路径中,这个圆弧实为圆或者椭圆的一部分,如下一段代码:
 Path path = new Path();
 RectF oval = new RectF(0, 200, 300, 500);
 path.addArc(oval, 0, 180);
 canvas.drawPath(path, paint);
 
 Path path = new Path();
 RectF oval = new RectF(50, 50, 150, 150);
 path.addRoundRect(oval,25,25, Path.Direction.CCW);
 RectF oval2 = new RectF(50, 200, 250, 300);
 path.addOval(oval2, Path.Direction.CCW);
 RectF oval3 = new RectF(50, 350, 150, 450);
 path.addRect(oval3, Path.Direction.CCW);
 path.addCircle(100, 550, 50, Path.Direction.CCW);
 canvas.drawPath(path, paint);
- 
    Path.Op 
 Path.Op.DIFFERENCE表示从path中去除path2的部分,保留path的部分。如下案例:
 Path path = new Path();
 Path path2 = new Path();
 path.addCircle(200, 200, 100, Path.Direction.CCW);
 path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
 path.op(path2, Path.Op.DIFFERENCE);
 canvas.drawPath(path, paint);
- 
    Path.Op.INTERSECT 
 Path.Op.INTERSECT表示取path和path2相交的部分显示出来,如下:
 Path path = new Path();
 Path path2 = new Path();
 path.addCircle(200, 200, 100, Path.Direction.CCW);
 path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
 path.op(path2, Path.Op.INTERSECT);
 canvas.drawPath(path, paint);
- 
    Path.Op.REVERSE_DIFFERENCE 
 Path.Op.REVERSE_DIFFERENCE表示除去path的部分,只显示path2的部分,如下:
 Path path = new Path();
 Path path2 = new Path();
 path.addCircle(200, 200, 100, Path.Direction.CCW);
 path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
 path.op(path2, Path.Op.REVERSE_DIFFERENCE);
 canvas.drawPath(path, paint);
- 
    Path.Op.UNION 
 Path.Op.UNION表示path和path2的部分都要显示出来,如下:
 Path path = new Path();
 Path path2 = new Path();
 path.addCircle(200, 200, 100, Path.Direction.CCW);
 path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
 path.op(path2, Path.Op.UNION);
 canvas.drawPath(path, paint);
- 
    Path.Op.XOR 
 Path.Op.XOR表示显示path和path2但是不包含二者的交集。如下:
 Path path = new Path();
 Path path2 = new Path();
 path.addCircle(200, 200, 100, Path.Direction.CCW);
 path2.addRect(200, 200, 300, 300, Path.Direction.CCW);
 path.op(path2, Path.Op.XOR);
 canvas.drawPath(path, paint);
其它
- 
    最小滑动距离值,大于该值则认为是滑动 ViewConfiguration configuration = ViewConfiguration.get(context); 
 int touchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(configuration);
- 
    requestDisallowInterceptTouchEvent 当用户按下的时候,我们告诉父组件,不要拦截我的事件(这个时候子组件是可以正常响应事件的),拿起之后就会告诉父组件可以阻止。 

 
                
 
                
