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/50654494demo地址:
https://github.com/lengqi19860101/ViewPractice.git
相关文章推荐
- Android逆向系列之动态调试(七)–IDA调试so文件(下)
- Android ImageView清空图片
- android代码设置RelativeLayout的高度
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- Android启动过程研究(一:init进程)
- android 简单自定义环形进度条
- Android MultiDex机制杂谈
- Android 布局
- android6.0源码分析之Activity启动过程
- Android6.0 无法在SD卡创建目录
- android热修复学习记录
- 基于Android的多媒体播放器(毕业设计)
- android-R.array
- Android蓝牙低功耗开发
- android Menu详解
- Android studio导入9图报错
- android-R.anim
- android中的通信机制总结
- art 是怎么把 dalvik 指令编译成 native code 第二篇(走马观花)
- Bilibili/DanmakuFlameMaster: Android开源弹幕引擎·烈焰弹幕使 ~ JNI source:Bilibili/NativeBitmapFactory