`
ipjmc
  • 浏览: 707425 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对Canvas和Matrix的理解

阅读更多

        不了解Matrix的同学看这里:http://ipjmc.iteye.com/blog/1275366
        弄明白matrix那几个方法的使用了,比如preTranslate, setTranslate, postTranslate这些。以前对它们都是一知半解,以为这几个方法没什么区别,其实还是有很大不同的,最紧要是这几个方法的调用顺序对坐标变换的影响。抽象的说pre方法是向前"生长", post方法是向后"生长",具体拿个例子来说,比如一个matrix调用了下列一系列的方法:

    matrix.preScale(0.5f, 1);
    matrix.preTranslate(10, 0);
    matrix.postScale(0.7f, 1);  
    matrix.postTranslate(15, 0); 

    则坐标变换经过的4个变换过程依次是:
translate(10, 0) -> scale(0.5f, 1) -> scale(0.7f, 1) -> translate(15, 0)

        所以对matrix方法的调用顺序是很重要的,不同的顺序往往会产生不同的变换效果。pre方法的调用顺序和post方法的互不影响,即以下的方法调用和前者在真实坐标变换顺序里是一致的

    matrix.postScale(0.7f, 1); 
    matrix.preScale(0.5f, 1);  
    matrix.preTranslate(10, 0); 
    matrix.postTranslate(15, 0);


        而matrix的set方法则会对先前的pre和post操作进行刷除,而后再设置它的值,比如下列的方法调用:
    matrix.preScale(0.5f, 1); 
    matrix.postTranslate(10, 0);
    matrix.setScale(1, 0.6f);
    matrix.postScale(0.7f, 1);
    matrix.preTranslate(15, 0); 


        其坐标变换顺序是:translate(15, 0) -> scale(1, 0.6f) ->  scale(0.7f, 1).

        这是因为setScale重新设置了矩阵的值,之前的两个变换是无效的了,所以最终的显示效果只有三个变换效果。

        Canvas里scale, translate, rotate, concat方法都是pre方法,如果要进行更多的变换可以先从canvas获得matrix, 变换后再设置回canvas.

转自:http://longshuai2007.blog.163.com/blog/static/14209441420117521823875/
分享到:
评论

相关推荐

    Android canvas.save()和canvas.restore()的理解

    它与`save()`成对使用,确保在完成一组绘图操作后,`Canvas`可以回到调用`save()`时的状态。通常,`restore()`应该与最近的未匹配的`save()`配对使用。如果`save()`和`restore()`没有正确配对,可能会导致绘图错误...

    Android canvas 放大 缩小 平移

    在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具。Canvas提供了丰富的API,允许开发者进行复杂的自定义视图(Custom View)绘制,包括放大、缩小...不断地实践和调试,将有助于你更好地理解和运用这些知识。

    led-canvas-matrix:Matrix 类为 led-canvas 和 led-canvas-text 提供基本的数据结构

    6. **文本渲染**: "led-canvas-text"部分可能扩展了Matrix类,添加了对文本的处理能力。这包括字体库、字符映射、对齐方式和滚动文本等功能,使开发者能够方便地在LED画布上显示文本。 7. **API接口**: 该库可能...

    Android-使用Matrix对Bitmap进行处理

    而Matrix则是Android图形系统中的一个关键类,它允许我们对图像进行各种变换操作,如旋转、缩放、平移和倾斜等。这个教程将深入探讨如何在Android中利用Matrix对Bitmap进行处理。 首先,我们需要了解Bitmap的基本...

    Android下使用Matrix进行图形变换处理的Demo

    Canvas是Android提供的绘制图形的接口,我们可以通过调用Canvas的`drawBitmap`或`drawRect`等方法绘制图形,然后调用`Canvas.save()`保存当前状态,对Matrix进行一系列变换,最后使用`Canvas.restore()`恢复到保存的...

    在Canvas上显示动画

    要实现“在Canvas上显示动画”,我们需要深入理解Canvas的使用方式以及与动画相关的概念和技术。以下是对这个主题的详细阐述: 1. **Canvas基础**: Canvas是Android的图形绘制接口,提供了丰富的绘制方法,如...

    canvas小游戏-连连看

    在这个项目中,开发者将学习到如何使用JavaScript进行游戏开发,理解Canvas绘图API,以及如何设计和实现复杂的游戏逻辑。此外,还有机会接触到如何组织和管理游戏的状态,以及如何通过事件处理来响应用户的交互。...

    Paint和Canvas使用总结

    本篇文章将对`Paint`和`Canvas`的使用进行详细总结,帮助开发者深入理解这两者的功能和用法。 首先,`Paint`类主要负责设置绘制时的样式和属性,如颜色、线条宽度、字体大小、抗锯齿效果等。以下是一些常见的`Paint...

    android利用Paint在Canvas上实现竖排写字

    在Android开发中,Canvas...Test_DrawText可能是示例代码或者测试用例,通过查看和运行这个文件,可以更直观地理解这个过程。在实际项目中,结合布局和事件处理,可以将这一功能整合到用户界面中,提供更好的用户体验。

    实战Android:图片处理之ColorMatrix和Matrix实例

    理解并熟练掌握`ColorMatrix`和`Matrix`的使用,不仅可以提升Android应用的视觉效果,还能帮助开发者在处理图像时有更多创新。在实际项目中,这些技术可以应用于相机滤镜、自定义控件的动画效果,甚至游戏中的图形...

    HTML5 Canvas炫酷3D背景动画代码HTML5 Canvas炫酷3D背景动画代码.zip

    要在Canvas上实现3D效果,我们需要运用矩阵变换,如`translate`、`scale`、`rotate`和`matrix`。这些变换可以改变坐标系,实现对象的平移、缩放和旋转,从而创建出立体感。同时,我们还需要理解透视原理,使得图形...

    Android Matrix demo

    在Android中,当你对Bitmap或者View进行绘制时,可以使用Canvas对象的`drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)`或`drawRect(RectF rect, Matrix matrix, Paint paint)`方法,通过传入Matrix对象,...

    Android应用源码之Matrix.zip

    本资料“Android应用源码之Matrix.zip”旨在帮助开发者深入理解Android Matrix类的内部实现和应用。下面将详细探讨Matrix类的相关知识点。 一、Matrix基本概念 Matrix类在Android的android.graphics包中,它是一个...

    关于android Matrix的使用

    在Android开发中,Matrix类是用于处理二维图形变换的核心工具,尤其在图像处理和视图渲染方面发挥着重要作用。...不断实践和尝试不同的Matrix设置,可以帮助开发者更好地理解和掌握这一强大的工具。

    canvas2image.rar

    3. **变换矩阵(Transformation Matrix)**:在Canvas上进行旋转、缩放等操作时,会用到2D变换矩阵。通过对矩阵进行相应操作,可以实现图像的平移、旋转和缩放。 4. **事件监听**:通过监听`touchstart`, `...

    Android Canvas Demo

    《Android Canvas 演绎:绘制的艺术与...以上就是关于"Android Canvas Demo"的主要知识点,希望这个详细的解析能帮助你理解和掌握Android图形绘制的核心技术,让你在Android应用开发中挥洒自如,创造出独特的视觉体验。

    CSS3 Canvas特效:3D星空穿越动画特效.rar

    在Canvas中,可以使用`translate`、`scale`和`rotate`函数来模拟3D变换,配合`matrix`或`setTransform`方法,可以实现更复杂的3D坐标转换。同时,可能还运用了光照和阴影的算法,使星星看起来更加立体。 此外,值得...

    Android画图之Matrix

    本文将深入探讨如何在Android中使用`Matrix`进行画图,以帮助开发者更好地理解和运用这一关键概念。 `Matrix`(矩阵)在数学中是一种线性代数结构,而在Android的绘图系统中,它被用来表示2D图形的各种变换,如平移...

    Canvas绘制3D波浪粒子动画特效.zip

    在JavaScript世界中,Canvas元素是用于在网页上绘制2D图形和图像的API。然而,随着WebGL的出现,我们也可以在Canvas上实现3D效果。"Canvas绘制3D波浪粒子动画特效"是一个利用HTML5 Canvas和JavaScript技术实现的创新...

    canvas绘制ascii码表文字3D旋转特效

    - 要实现3D旋转,我们需要理解3D坐标系和矩阵变换。在2D平面上,我们可以使用`translate`、`rotate`、`scale`等方法进行变换。而在3D空间中,我们通常需要借助于矩阵运算,如旋转矩阵、透视矩阵等。 - 使用`canvas...

Global site tag (gtag.js) - Google Analytics