端口CGAffineTransform从iOS到Android

我有下一组值:
0.439353,-0.073688,0.078788,0.439353,139.500000,72.000000
Let's name the values: a,b,c,d,tx,ty

在iOS版本的应用程序中,这些值将发送到此对象see here

在我的Android应用程序中,我正在尝试这样的事情:

Matrix mtx = new Matrix();
mtx.setValues(new float[] { a,ty,1});

this帖子,在Android中,Matrix对象接受按照该顺序(a,ty)的值,而不是iOS版本(a,ty).

我的问题是旋转和缩放正确完成,但我有翻译部分的问题.它不会在屏幕上正确定位.任何人有什么想法我做错了什么?

编辑
我正在使用矩阵在画布上发布位图,就像这样

protected void onDraw(Canvas canvas) {
    // .....
    canvas.drawBitmap(bmp,mtx,null);
}

解决方法

原因是iOS基于中心位置计算矩阵,但是android和web基于{0,0}位置.所以解决方案是您必须首先将位图移动到相对于屏幕密度的正确比例的中心位置,然后应用矩阵.我的工作良好的android代码是:
Matrix matrixA = new Matrix();
matrixA.postTranslate(-bitmapWidth/2,-bitmapHeight/2);
matrixA.postScale(screenWidth/320,screenWidth/320);
Matrix matrixB = new Matrix();
matrixB.setValues(new float[]{scale,-rotate,tX,rotate,scale,tY,0.0F,1.0F});
matrixA.postConcat(matrixB);

canvas.drawBitmap(bitmap,matrixA,null);

而网络css3代码是:

<img style="left: tX; top: tY; transform: matrix(scale,0) scale(window.screen.width/320);">

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...