更多贝塞尔曲线细节可参照:http://blog.csdn.net/flash129/article/details/8234599
Path的介绍
Path就像它的原本的意思一样是路径的意思,它可以根据设置点来绘制各种图形。
Path的初始化也是用new完成的。一般在第二个构造器中。
Path的对象用path.moveTo(100,100);设置起始位置, 即我们下笔的位置path.lineTo(0,200);设置下一个位置。当需要一个闭合图形时最后调用
path.close();//收尾连接.
在path中还定义了一些特殊的图形,例如圆。与canvas直接调用方法画圆的方法有些不同,这里还指出了方向Path.Direction.CCW表示逆时针,Path.Direction.CW表示顺时针。
BitMap的用法
BitMap就是将某个图像写到自定义的View中并可以对其进行包括平移,旋转缩放等操作。
BitMap的初始化:
mbitMap= BitmapFactory.decodeResource(getResources(), R.mipmap.aa);//对BitMap初始化。R.mipmap.aa就是我们进行写入的图片。
可以通过调用bitwidth=mbitMap.getWidth();
bitheigt=mbitMap.getHeight();获得图片的宽度和高度。
在 onDraw()中调用 canvas.drawBitmap(bitmap,0,0,mpaint);就可以将图片画到画布上。(0,0)是图片开始的位置。
Matrix(矩阵)的功能
可以通过Matrix的值的设置对图片进行平移,旋转,缩放等操作。
Matrix的初始化为: private Matrix matrix=new Matrix ();
matrix.reset();为将matrix中的数据清空,恢复为默认值。
PorterDuffXfermode是用来干啥的呢?
它是设置paint的画图模式的。
当我们不是根据现有的图片在画布上进行BiMap绘制的时候,想自己画一些集合图形的时候,就必须在BitMap上再创建一个Canvas,在这个Canvas上进行绘制,最后再调用原有的Canvas进行绘制。
用法
1、建立PorterDuffXfermode的对象,并设置相应的mode。
PorterDuffXfermode mode = new PorterDuffXfermode(PorterDuff.Mode.XOR);
2、当建立了mode,就要设置到相应的画笔上:
代码如下:
PorterDuffXfermode mode=new PorterDuffXfermode(PorterDuff.Mode.DST_OUT);
mPaintRect.setXfermode(mode);
3、既然是自定义的bitmap就一定要设置其宽度和高度。一般在onMeasure方法中设置,因为我们可能要用到View的宽和高。只有运行到onMeasure才能获得View的宽和高。
mBitmap=Bitmap.createBitmap(mWidth,mHeight,Bitmap.Config.ARGB_8888);
4、新建一个Canvas,并将其设置为BitMap的。在onMeasure中代码如下:
private Canvas canvasBit;
canvasBit=new Canvas(mBitmap);
5、效果图
相应的mode对应的效果图如下:
画可动的波浪线
public class MyPathView extends View {
private Paint mPaint;
private Paint mPaintPoint;
private int mWidth;
private int mHeight;
private Path mPath;
private static final int NEED_INVALIDATE=0X23;
private int count=0;
private int size=0;
private boolean isAdd=true;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {