Android 缩放、旋转和移动垂直或水平翻转的SVG对象

Android 缩放、旋转和移动垂直或水平翻转的SVG对象,android,matrix,svg,transformation,flip,Android,Matrix,Svg,Transformation,Flip,我最近问了一个关于如何垂直或水平翻转SVG对象的问题: 现在,通过编程,我希望能够在垂直或水平翻转对象时移动、旋转和缩放对象 我在Android应用程序中绘制所有常用对象,然后将其保存为SVG对象。我对Android工作的所有计算都是正确的 当我导出到SVG时,我知道:每个对象属性(ScaleX、ScaleY、Rotation、CenterX、CenterY、MovedX、MovedY)和SVG文档的宽度、SVG文档的高度,但我似乎无法正确导出。我以为我解决了,但后来有些东西不见了,我想不出是

我最近问了一个关于如何垂直或水平翻转SVG对象的问题:

现在,通过编程,我希望能够在垂直或水平翻转对象时移动、旋转和缩放对象

我在Android应用程序中绘制所有常用对象,然后将其保存为SVG对象。我对Android工作的所有计算都是正确的

当我导出到SVG时,我知道:每个对象属性(ScaleX、ScaleY、Rotation、CenterX、CenterY、MovedX、MovedY)和SVG文档的宽度、SVG文档的高度,但我似乎无法正确导出。我以为我解决了,但后来有些东西不见了,我想不出是什么。我想我不可能是唯一一个想到这一点的人,否则至少这个问题有一定的作用

通过我的Android应用程序上的“触摸”输入可以做什么的示例:

  • 从左、上、右、下画一个矩形
  • 添加时:计算对象的中心(如果右<左等,则固定),另存为CenterX和CenterY
  • 如果需要,移动对象,将其另存为MoveX和MoveY(不会覆盖左/上/右/下)
  • 旋转对象并将其转换为一定程度,然后将其另存为旋转
  • 缩放对象,但不低于0.1比例,并将其另存为ScaleX和ScaleY
  • 将其导出为矩形(x=左侧,y=顶部,宽度=左右,高度=右下)
  • 添加颜色、笔划等,然后添加“变换”属性
  • 缩放对象时,对象将围绕其中心进行缩放。当对象旋转时,它会围绕其中心旋转。当它被移动时,它会增加屏幕上当前接触点和上一个接触点之间的差异

    现在,如果某些标志设置为“VerticalFlip”或“HorizontalFlip”,Android将在您绘制翻转变体的同时绘制翻转变体。导出时,它会检查对象是否具有这些标志之一

    这是我如何计算的一个例子,但可能我完全遗漏了一些东西,或者我使事情复杂化了:

    每个算法下面都有一个链接,表明该算法至少在该实例中有效

    现在,当我保存它时,使用精确的系统。由于提供了正确导出它所需的所有值,它仍然不起作用。有些物体看起来恰到好处,另一些则完全变形。即使它们都被翻转、移动、旋转和缩放。一些导出的对象看起来与它们应该的完全一样,而另一些则不一样

    左侧是应用程序中图形的屏幕截图,右侧是Inkscape中导出的SVG。SVG Size=绘制它的屏幕的大小。导出时不缩放整个屏幕。此处的所有对象都已缩放、旋转和移动。这里只有红色的物体很明显有问题


    和往常一样,我尽量做到彻底:所以,当导出到SVG时。它为每个标志添加一个对象:普通SVG对象、垂直翻转SVG对象、水平翻转SVG对象或水平垂直翻转SVG对象,具体取决于所绘制对象设置的“标志”。所以我在Android应用程序上看到的东西并不存在“两次”,它只是镜像而已。当我将其保存为SVG时,我需要将其保存为两个或四个不同的对象,这就是我要做的。因此,当设置垂直翻转=将保存两个对象时,设置两个标志时=保存四个对象。在页面底部更新和解释每种算法的使用时间:是否可以显示一个看起来错误的示例?是否确定其围绕中心的缩放正确?因为我无法指定在SVG中缩放的坐标,所以我不能说。但无论我在旋转中放置什么(度、中心x、中心y)都是对象的中心。