Windows phone 7 类似内置WP7的图像/照片库
我正在寻找Windows Phone 7的照片库。它的外观和工作原理与内置的照片查看器相同(使用flick动作滑动照片,使用挤压和拖动调整大小)。当您轻弹图像时,您可以看到它滑到下一个图像…并将列表捕捉到该图像 我已经为图像构建了调整大小和拖动功能。我只是不知道如何创建实际的照片滑块 谁能给我指出正确的方向吗 我尝试过的事情:Windows phone 7 类似内置WP7的图像/照片库,windows-phone-7,Windows Phone 7,我正在寻找Windows Phone 7的照片库。它的外观和工作原理与内置的照片查看器相同(使用flick动作滑动照片,使用挤压和拖动调整大小)。当您轻弹图像时,您可以看到它滑到下一个图像…并将列表捕捉到该图像 我已经为图像构建了调整大小和拖动功能。我只是不知道如何创建实际的照片滑块 谁能给我指出正确的方向吗 我尝试过的事情: Pivot Viewer(无法工作,因为它会干扰图像的拖动功能,无法禁用Pivot Viewer触摸) 普通列表框(找不到如何捕捉到当前图像) 提前感谢使用水平方向的
- Pivot Viewer(无法工作,因为它会干扰图像的拖动功能,无法禁用Pivot Viewer触摸)
- 普通列表框(找不到如何捕捉到当前图像)
更好的方法是编写自己的自定义控件来查看图像。在Silverlight中,这是一个很好的开始。一旦您了解了如何将图像采集绑定到自定义控件,您所需要的就是处理当前选定项目上的用户手势。实际上,我已经在我的一个应用程序中实现了您所说的内容 您需要使用Silverlight Control TOolkit的手势侦听器来捕获触摸时的拖拽和挤压 为图像定义合成变换,并设置其比例(收缩时)和偏移(拖动时) 显然,当图像未缩放时,拖动可触发转到下一图像 为了让它感觉更平滑,您可能需要在页面资源上定义一个故事板来使用(而不仅仅是设置偏移量) 我希望能有所帮助/
滑块效果的拖动处理程序伪代码:
<Canvas>
<Image x:Name="imgImage" Source="{Binding ...}" Width="..." Height="...">
<Image.RenderTransform>
<CompositeTransform x:Name="imgImageTranslate" />
</Image.RenderTransform>
</Image>
</Canvas>
private void GestureListener_DragCompleted(object sender, DragCompletedGestureEventArgs e)
{
if (e.Direction == System.Windows.Controls.Orientation.Horizontal)
{
var abs = Math.Abs(PANEL_DRAG_HORIZONTAL);
if (abs > 75)
{
if (PANEL_DRAG_HORIZONTAL > 0) // MovePrevious;
else //MoveNext();
e.Handled = true;
}
}
}
double PANEL_DRAG_HORIZONTAL = 0;
private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)
{
if (e.Direction == System.Windows.Controls.Orientation.Horizontal)
{
PANEL_DRAG_HORIZONTAL += e.HorizontalChange;
var baseLeft = -imgImage.Width / 2;
if (PANEL_DRAG_HORIZONTAL > 75) imgImageTranslate.OffsetX = baseLeft + PANEL_DRAG_HORIZONTAL;
else if (PANEL_DRAG_HORIZONTAL < -75) imgImageTranslate.OffsetX = baseLeft + PANEL_DRAG_HORIZONTAL;
else imgImageTranslate.OffsetX = baseLeft;
}
}
}
private void GestureListener_DragStarted(object sender, DragStartedGestureEventArgs e)
{
PANEL_DRAG_HORIZONTAL = 0;
}
私有void GestureListener_DragCompleted(对象发送方,DragCompletedGestureEventArgs e)
{
if(e.Direction==System.Windows.Controls.Orientation.Horizontal)
{
var abs=Math.abs(面板拖动水平);
如果(abs>75)
{
如果(面板拖动水平>0)//MovePrevious;
else//MoveNext();
e、 已处理=正确;
}
}
}
双面板水平拖动=0;
私有void GestureListener_DragDelta(对象发送方,DragDeltaGestureEventArgs e)
{
if(e.Direction==System.Windows.Controls.Orientation.Horizontal)
{
面板拖动水平+=水平变化;
var baseLeft=-imgImage.Width/2;
如果(面板水平拖动>75)imgImageTranslate.OffsetX=baseLeft+PANEL水平拖动;
如果(面板水平拖动<-75)imgImageTranslate.OffsetX=baseLeft+面板水平拖动;
else imgImageTranslate.OffsetX=baseLeft;
}
}
}
私有void GestureListener_DragStarted(对象发送方,DragStartedTestureEventArgs e)
{
面板水平拖动=0;
}
当您轻弹下一张图像时,scrollviewer是否能够“捕捉”到下一张图像?哇…此框中没有新行:)。。。你能发布一个你的建议的例子吗?查看我编辑过的答案以获得另一个想法。ScrollViewer中没有管理单元。在您的解决方案中,我是否使用带有itemscontrol的ScrollViewer?还有一个用于在scrollviewer中滑动图像的故事板?或者我需要另一个容器控件吗?我对silverlight的这方面相当陌生(一直在stuf后面编写代码,主要操作数据:),实际上我使用的是一个简单的容器(据我记忆所及:D)。但请注意,我在UI上一次只显示一个图像(这使它更快),所以滑动并不是真正的滑动。它是(动画图像到最左边,显示下一个图像,动画从最右边到中心)我已经尝试了一些事情。。。但无法让它工作。您是否可以发布一些示例代码?只是为了让我开始:)请看我上面的代码。请注意,75是我保持的边距,以避免非常敏感的滑块。另外,您的动画将进入MoveNext()和MovePrevious()。thnx!明天早上我要做的第一件事就是:)