2017-05-15 12 views
0

Windows Phoneの開始画面(例:https://www.windowscentral.com/sites/wpcentral.com/files/styles/larger/public/field/image/2014/04/Clean_vs_Busy.jpg?itok=58NioLgB)のように、半透明アイテムの背景を持つ画像のリストビューでUWPアプリケーションを開発します。 私の解決策は、UWP Community toolkit parallax serviceです。UWPオフセット付き視差

var p = parallaxElement.TransformToVisual(scroller).TransformPoint(new Point(0, 0)); 

は、私は、これはアニメーション表現にオフセットを追加する必要があります まず私は、アイテムの左上のポイントを取りましたか?また、私はこれについて完全な文書を見つけられませんでした。

ExpressionAnimation expression = compositor.CreateExpressionAnimation(
     "Matrix4x4.CreateFromTranslation(Vector3(HorizontalMultiplier * scroller.Translation.X, VerticalMultiplier * scroller.Translation.Y, 0.0f))"); 
    expression.SetReferenceParameter("scroller", scrollerViewerManipulation); 
    expression.SetScalarParameter("offsetX", (float)p.X); 
    expression.SetScalarParameter("offsetY", (float)p.Y); 

言い換えれば、私は「共有された大きな画像上のアイテムを見る」ことを効果的にしたいと思います。アイテムはキャンバスに揃っています。

+0

アイテムのグリッド表示(WPホーム画面など)で1つのイメージをアニメートしようとしていますか?または、あなたの "画像のリストビュー"ですべての画像をアニメートしようとしていますか? –

+0

listviewの画像の一部または全部をアニメーション化したい – Ivan

答えて

1

リストの画像をすべてアニメーション化するには、sample from the Windows Composition teamに従ってください。

ここにtl/drバージョンがあります。

アニメーションを作成します。ページがロードされたときに、これを行います。

private void SetupAnimation() 
{ 
    // available with SDK version 15063 
    Compositor compositor = Window.Current.Compositor; 
    // available with previous SDK version 
    //Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; 

    // Get scrollviewer using UWP Community Toolkit extension method 
    ScrollViewer myScrollViewer = ImageList.FindDescendant<ScrollViewer>(); 
    _scrollProperties = ElementCompositionPreview.GetScrollViewerManipulationPropertySet(myScrollViewer); 

    // Setup the expression 
    var scrollPropSet = _scrollProperties.GetSpecializedReference<ManipulationPropertySetReferenceNode>(); 
    var startOffset = ExpressionValues.Constant.CreateConstantScalar("startOffset", 0.0f); 
    var parallaxValue = 0.5f; 
    var parallax = (scrollPropSet.Translation.Y + startOffset); 
    _parallaxExpression = parallax * parallaxValue - parallax; 
} 

アニメイトコンテナの変更(:あなたのListViewのContainerContentChangingイベントにサブスクライブ)リスト内の各画像このサンプルでは、​​と連携

private void ImageList_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args) 
{ 
    // Find the image element to animate 
    Image image = args.ItemContainer.ContentTemplateRoot.GetFirstDescendantOfType<Image>(); 

    Visual visual = ElementCompositionPreview.GetElementVisual(image); 
    // You'll want to use the right size for your images 
    visual.Size = new Vector2(960f, 960f); 

    if (_parallaxExpression != null) 
    { 
     _parallaxExpression.SetScalarParameter("StartOffset", (float)args.ItemIndex * visual.Size.Y/4.0f); 
    visual.StartAnimation("Offset.Y", _parallaxExpression); 
    } 
} 

は、 ListViewまたはGridView

+0

ありがとうございました、それが私が探していたものです。このソリューションにstartOffsetXを追加し、アニメーションをOffset.XYにする方法を教えてください。 – Ivan

+0

Offset.Yのように別のアニメーション "Offset.X"を追加することができます –