Shape

shape资源可以定义矩形(rectangle)、椭圆(oval)、线段(line)、环形(ring)四种简单二维图形,例如1、椭圆

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="#00000000"/>
    <stroke android:width="4dp" android:color="#99000000"
            android:dashWidth="4dp" android:dashGap="2dp" />
    <padding android:left="7dp" android:top="7dp"
            android:right="7dp" android:bottom="7dp" />
    <corners android:radius="4dp" />
</shape>



线段

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
    <stroke android:width="1dp" android:color="#FF000000"
            android:dashWidth="1dp" android:dashGap="2dp" />
</shape>



shape默认情况下是矩形

MaskFilter


maskFilter可以对图像做一些边缘的处理,android中提供了两种效果


1、EmbossMaskFilter 浮雕效果


     EmbossMaskFilter (float[] direction, float ambient, float specular, float blurRadius)


     direction指定光源方向;light指定光源亮度;specular光等级;blurRadius模糊度


例如:

new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f);


2、BlurMaskFilter 模糊效果


     BlurMaskFilter (float radius, BlurMaskFilter.Blur style)

     radius范围大小?;style样式,一共有四种样式。

PathEffect    

pathEffect可以对通过path绘制的线条改变样式,有以下几种

1、CornerPathEffect,路径连接处平滑处理;

2、DashPathEffect,路径变为虚线 ;

3、PathDashPathEffect,对2的扩展,使虚线点具有形状;

4、ComposePathEffect,组合两种pathEffect;

5、DiscretePathEffect,使每段路径产生随机的偏移;

6、SumPathEffect,叠加两种pathEffect。

Picture



picture可以用来记录一个canvas的绘制过程,之后可以通过该picture重复相同的绘制,而且可以取得较高的性能。例如



mPicture = new Picture();
drawSomething(mPicture.beginRecording(200, 100));
mPicture.endRecording();



Matrix



Matrix可以提供一系列的矩阵变换,用于图形的平移,缩放,旋转,还提供了两种用于生成变换矩阵的方法:



1、点到点的变换 setPolyToPoly (float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount) ;



这种变换通过点的个数可以达到特殊的效果,例如,一个点--平移,两个--旋转、缩放,三个点--旋转、变形,四个点--透视效果。



    1)src,源点坐标数组,形如[x0,y0,x1,y1,…];



    2)srcIndex,指出在1)的数组中从哪个点开始变换;



    3)dst,目标坐标数组,形式同1),用于与源点坐标对应;



    4)dstIndex,指出在3)中的数组中从哪个点用于对应;



    5)pointCount,用于对应点的个数。



2、矩形到矩形的变换 setRectToRect (RectF src, RectF dst, Matrix.ScaleToFit stf) ,其中Matrix.ScaleToFit用于指定变换方式,一共有三种变换方式:



    1)start,保持变换前矩形长宽比,最大限度填充变换后的矩形,并位于左上方;



    2)end,同1),但位于右下方;



    3)center,同1),位于中央;



    4)fill,最大限度填充,使长宽比满足变换后的矩形;






其他


1、canvas可以通过cavase.saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags)来产生一个新的图层,当在新图层绘制完成以后,通过canvas.restore()将新图层与上一图层合并。


2、paint通过setTextSize()指定绘制文字的大小,getTextWidth()可以获得字符串中每一个字符的宽度;measureText()获得字符串总的宽度;getTextBound()获得所占矩形区域的大小。