zoukankan      html  css  js  c++  java
  • Matrix的set,pre,post调用顺序

    Matrix调用一系列set,pre,post方法时,可视为将这些方法插入到一个队列.当然,按照队列中从头至尾的顺序调用执行.
    其中pre表示在队头插入一个方法,post表示在队尾插入一个方法.而set表示把当前队列清空,并且总是位于队列的最中间位置.当执行了一次set后:pre方法总是插入到set前部的队列的最前面,post方法总是插入到set后部的队列的最后面

    例一:
    Matrix m = new Matrix();
    m.setRotate(45); 
    m.setTranslate(80, 80);
    只有m.setTranslate(80, 80)有效,因为m.setRotate(45);被清除.

    例子二:
    Matrix m = new Matrix();
    m.setTranslate(80, 80);
    m.postRotate(45);
    先执行m.setTranslate(80, 80);后执行m.postRotate(45);

    例子三:
    Matrix m = new Matrix();
    m.setTranslate(80, 80);
    m.preRotate(45);
    先执行m.setTranslate(80, 80);后执行m.preRotate(45);

    例子四:
    Matrix m = new Matrix();
    m.preScale(2f,2f);    
    m.preTranslate(50f, 20f);   
    m.postScale(0.2f, 0.5f);    
    m.postTranslate(20f, 20f);  
    执行顺序:m.preTranslate(50f, 20f)-->m.preScale(2f,2f)-->m.postScale(0.2f, 0.5f)-->m.postTranslate(20f, 20f)
    注意:m.preTranslate(50f, 20f)比m.preScale(2f,2f)先执行,因为它查到了队列的最前端.

    例子五:
    Matrix m = new Matrix();
    m.postTranslate(20, 20);   
    m.preScale(0.2f, 0.5f);
    m.setScale(0.8f, 0.8f);   
    m.postScale(3f, 3f);
    m.preTranslate(0.5f, 0.5f);
    执行顺序:m.preTranslate(0.5f, 0.5f)-->m.setScale(0.8f, 0.8f)-->m.postScale(3f, 3f)
    注意:m.setScale(0.8f, 0.8f)清除了前面的m.postTranslate(20, 20)和m.preScale(0.2f, 0.5f);  

  • 相关阅读:
    zhuanzai
    安装 Python
    解决删除/升级Python导致Ubuuntu无法进入桌面的问题
    硬盘安装ubuntu120.04分区方案
    ping: sendto: Network is unreachable
    电脑系统右键反应很慢问题
    安装Ubuntu下的开发工具
    设置文件夹为超级权限
    Ubuntu12.04配置静态ip地址
    马拉车算法
  • 原文地址:https://www.cnblogs.com/exmyth/p/4967356.html
Copyright © 2011-2022 走看看