端口CGAffineTransform从iOS到Android

前端之家收集整理的这篇文章主要介绍了端口CGAffineTransform从iOS到Android前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有下一组值:
  1. 0.439353,-0.073688,0.078788,0.439353,139.500000,72.000000
  2. Let's name the values: a,b,c,d,tx,ty

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

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

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

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

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

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

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

解决方法

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

而网络css3代码是:

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

猜你在找的iOS相关文章