3

我正在使用自定义 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 )
    }
  }
});

有没有人做过这样的事情?我完全错误地接近它吗?

提前致谢

4

0 回答 0