通过在 Windows Phone 上滑动来调暗叠加层

Dim overlay by swiping on Windows Phone

我有一个矩形作为叠加层,我想通过上下滑动来修改它的不透明度,就像在应用程序 Free Talking Alarm Clock 中一样。我想通了,我必须处理 ManipulationStartedManipulationDelta 事件,但不确定要使用哪个值。此时我可以通过滑动来改变不透明度,但只有在滑动完成时才会改变,我希望在滑动时改变不透明度。我该怎么做?

现在,我有这个:

private Point initialpoint;
private double opacity;
private void rec_overlay_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
        {
        initialpoint = e.Position;
    }

private void rec_overlay_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    Point currentpoint = e.Position;

    if (initialpoint.Y - currentpoint.Y < 0)
    {
        opacity += 0.1;
        rec_overlay.Opacity = opacity;
        System.Diagnostics.Debug.WriteLine("Swipe down");
    }
    else if(initialpoint.Y - currentpoint.Y > 0)
    {
        opacity -= 0.1;
        rec_overlay.Opacity = opacity;
        System.Diagnostics.Debug.WriteLine("Swipe up");
    }
}

上面的代码有效,只需将不透明度值从 0.1 更改为 0.01

基本上,手指移动的距离应该与RectangleOpacity变化成正比。

您可以监控 最近的 Y 变化 e.Delta.Translation.Y 并将其除以 RectangleActualHeight 以便获得更准确的 Opacity 更改。

这样就可以了。

private void rec_overlay_ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
{
    // keep the Opacity value within its boundary
    if (rec_overlay.Opacity > 1)
    {
        rec_overlay.Opacity = 1;
    }
    else if (rec_overlay.Opacity < 0)
    {
        rec_overlay.Opacity = 0;
    }

    // update the opacity whenever a movement happens
    rec_overlay.Opacity += -e.Delta.Translation.Y / this.rec_overlay.ActualHeight;
}