任意点上的比例和中心矩阵

时间:2014-02-03 23:25:53

标签: android matrix android-imageview interpolation scaletransform

我正在使用自定义ImageView来显示相当大的位图。位图显示由矩阵处理,矩阵将其转换为用户看到的内容。我正在尝试实现“双击缩放”,但我不能完全正确。我试图将图像缩放到用户用这一点触摸的点上,最后到达屏幕中央。

我经历了很多矩阵数学和变换,基本上我需要做的是以下转换

float dx = centerX - focusX;
float dy = centerY - focusY;

Matrix m = new Matrix( baseMatrix );
m.postTranslate( -focusX, -focusY );
m.postScale( scale, scale );
m.postTranslate( focusX + dx, focusY + dy );

如果我只是交换矩阵就好了,但我需要从baseMatrix动画到这个新的。有没有办法在这两个矩阵之间进行插值?

我试图单独插入比例和翻译,但这对我来说效果不好(很有可能我做错了,这是正确的方法)。我目前正在为比例进行插值的方式如下。我已经尝试在处理程序中添加翻译插值,但它没有用完

mHandler.post( new Runnable() {

  @Override
  public void run() {
    mZooming = true;

    long now = System.currentTimeMillis();
    float currentMs = Math.min( durationMs, now - startTime );
    float newScale = (float) mEasing.easeInOut( currentMs, 0, deltaScale, durationMs );

    zoomTo( oldScale + newScale, destX, destY );

    if ( currentMs < durationMs ) {
      mHandler.post( this );
    } else {
      onZoomAnimationCompleted( getScale() );
      scrollBy( dx, dy, durationMs )
    }
  }
});

以前有人做过这样的事吗?我接近它完全错了吗?

提前致谢

0 个答案:

没有答案