通过在 Windows Phone 上滑动来调暗叠加层
Dim overlay by swiping on Windows Phone
我有一个矩形作为叠加层,我想通过上下滑动来修改它的不透明度,就像在应用程序 Free Talking Alarm Clock 中一样。我想通了,我必须处理 ManipulationStarted
和 ManipulationDelta
事件,但不确定要使用哪个值。此时我可以通过滑动来改变不透明度,但只有在滑动完成时才会改变,我希望在滑动时改变不透明度。我该怎么做?
现在,我有这个:
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
基本上,手指移动的距离应该与Rectangle
的Opacity
变化成正比。
您可以监控 最近的 Y 变化 即 e.Delta.Translation.Y
并将其除以 Rectangle
的 ActualHeight
以便获得更准确的 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;
}
我有一个矩形作为叠加层,我想通过上下滑动来修改它的不透明度,就像在应用程序 Free Talking Alarm Clock 中一样。我想通了,我必须处理 ManipulationStarted
和 ManipulationDelta
事件,但不确定要使用哪个值。此时我可以通过滑动来改变不透明度,但只有在滑动完成时才会改变,我希望在滑动时改变不透明度。我该怎么做?
现在,我有这个:
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
基本上,手指移动的距离应该与Rectangle
的Opacity
变化成正比。
您可以监控 最近的 Y 变化 即 e.Delta.Translation.Y
并将其除以 Rectangle
的 ActualHeight
以便获得更准确的 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;
}