画布捏和缩放,初始比例小于1

时间:2011-06-20 17:26:22

标签: windows-phone-7

我有一个外部画布,我在其中加载另一个画布(大尺寸)。我设置了剪辑几何体,因此屏幕上只能看到内部(大)画布的一部分。

由于内部画布的大小很大,所以我将内部画布的初始比例保持为0.4,即我在内部画布上应用了复合变换,并将scaleX和scaleY设为0.4。

现在我已经实现了OnPinchStart和OnPinchDelta的手势监听器方法。在OnPinchDelta中,我正在缩放画布。

问题在于,由于初始比例为0.4,因此在比例达到(或比例为1)之前,画布不会从中心缩放意味着它的位置会发生变化。但是,一旦比例因子达到(或交叉)1,画布的缩放就会正常开始。

简而言之,当比例因子小于1时,不会从中心或其他方式进行缩放,画布位置不会保持正确。

我尝试了很多不同的方法但是小于1的比例因子对我来说不能正常工作。任何帮助。

1 个答案:

答案 0 :(得分:0)

var factor = // calculate this based on amount of data and the speed
var width = // element rendered width
var height = // element rendered height
var changeInWidth = (1-factor) * width; // can be 0, neg or pos
var changeInHeight = (1-factor) * height;
var changeInX = changeInWidth / 2;
var changeInY = changeInHeight / 2;

Canvas.SetLeft(element, Canvas.GetLeft(element) + changeInX);
Canvas.SetTop(element, Canvas.GetTop(element) + changeInY);

确保您的元素被Canvas包裹,否则将忽略Left和Top。

为了计算因子,你可以使用e.DistanceRatio; 它可以作为因子使用,但如果你想增加(例如1.2)或减小(0.8)缩放速度,你可以将它乘以常数。