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