我正在使用自定义 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 )
}
}
});
有没有人做过这样的事情?我完全错误地接近它吗?
提前致谢