您的位置:首页 > 移动开发 > Android开发

Android 自定义View——使用画布canvas

2016-06-20 17:33 781 查看

1. translate 位移

translate 位移功能,位移是叠加的;

变化坐标中心点;

2. scale 缩放

scale 缩放也是叠加的;

scale 是根据缩放中心进行缩放的,缩放系数大于0则是放大缩小;

缩放系数小于0,则是放大缩小后还要根据缩放中心旋转180度。

3. rotate 旋转

rotate 旋转也是叠加的。

4.skew 倾斜

5. drawpicture

1.绘制图片

绘制有两种方法,drawPicture(矢量图) 和 drawBitmap(位图),接下来我们一一了解。

(1)drawPicture

1.使用Picture提供的draw方法绘制:

// 将Picture中的内容绘制在Canvas上
mPicture.draw(canvas);


2.使用Canvas提供的drawPicture方法绘制

drawPicture有三种方法:

public void drawPicture (Picture picture)

public void drawPicture (Picture picture, Rect dst)

public void drawPicture (Picture picture, RectF dst)

和使用Picture的draw方法不同,Canvas的drawPicture不会影响Canvas状态。

简单示例:

canvas.drawPicture(mPicture,new RectF(0,0,mPicture.getWidth(),200));


3.将Picture包装成为PictureDrawable,使用PictureDrawable的draw方法绘制。

// 包装成为Drawable
PictureDrawable drawable = new PictureDrawable(mPicture);
// 设置绘制区域 -- 注意此处所绘制的实际内容不会缩放
drawable.setBounds(0,0,250,mPicture.getHeight());
// 绘制
drawable.draw(canvas);


(2)drawBitmap

1. 获取Bitmap方式:

通过BitmapFactory从不同位置获取Bitmap:

资源文件(drawable/mipmap/raw):

Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(),R.raw.bitmap);


资源文件(assets):

Bitmap bitmap=null;
try {
InputStream is = mContext.getAssets().open("bitmap.png");
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}


内存卡文件:

Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/bitmap.png");


网络文件:

// 此处省略了获取网络输入流的代码
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();


2.绘制Bitmap

// 第一种

public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)

// 第二种
public void drawBitmap (Bitmap bitmap, float left, float top, Paint paint)

// 第三种
public void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)
public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)

//第一种方法中后两个参数(matrix, paint)是在绘制的时候对图片进行一些改变,如果只是需要将图片内容绘制出来只需要如下操作就可以了:
canvas.drawBitmap(bitmap2, new Matrix(), new Paint());//只是把图画出来,默认坐标原点

//第二种方法就是在绘制时指定了图片左上角的坐标(距离坐标原点的距离)
canvas.drawBitmap(bitmap2, 100, 300, new Paint());


//第三种

// 将画布坐标系移动到画布中央
canvas.translate(mWidth / 2, mHeight / 2);
// 指定图片绘制区域(左上角的四分之一)
Rect src = new Rect(0, 0, bitmap2.getWidth() / 2, bitmap2.getHeight() / 2);
// 指定图片在屏幕上显示的区域
RectF dst = new RectF(0, 0, 200, 400);

canvas.drawBitmap(bitmap2, src, dst, new Paint());


参考链接

http://blog.csdn.net/u013831257/article/details/50654494

demo地址:

https://github.com/lengqi19860101/ViewPractice.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: