1

これはAndroidでこれを行う方法については読んだことがありますが、Xamarin AndroidがレイアウトのLeftMarginとTopMarginをアニメートするのと同じように見えません。明らかにXamarinは "Animation"を持っていますが、私は "newLeftMargin * interpolatedTime"を設定したXamarinの "applyTransformation"の部分を理解できません。答えを提供するためのuser ApinedaAndroid - Change left margin using animationアニメーションLayoutParams LeftMarginとTopMargin

Animation a = new Animation(); 
//applyTransformation???? with "newLeftMargin * interpolatedTime" 
a.Duration = 500; 
MyThingy.StartAnimation(a); 

ありがとう:ここ

は、標準的なAndroidの参照です。誰かがそれを望む場合に私が書いたコードはここにあります。最初のコンストラクタは、ゼロからではなく、現在の状態からマージンをアニメートします。 2番目のコンストラクタでは、開始マージンを指定する必要があります。

次に、両方のコンストラクタを呼び出す方法を示します。

  // Animates a layout from it's current margins to specified margins 
      LayoutMarginAnimation animation = new LayoutMarginAnimation(this.DraggableSeedImageContainer, 1000, 1000); 
      // Animates a layout from specified margins to specified margins, regardless of what the margins are currently set to. 
      //LayoutMarginAnimation animation = new LayoutMarginAnimation(this.DraggableSeedImageContainer, 200, 200, 1000, 1000); 
      animation.Duration = 500; 
      this.DraggableSeedImageContainer.StartAnimation(animation); 

答えて

1

アニメーションクラスが抽象クラスであるため、問題が発生しています。独自の実装を作成し、ApplyTransformation()メソッドをオーバーライドする必要があります。

マイカスタムアニメーションクラス:あなたのアニメーションを使用して

class ViewLeftMargingAnimation : Animation 
{ 
    View _viewToTransform; 

    int _newLeftMargin; 

    public ViewLeftMargingAnimation (View viewToTransform, int newLeftMargin) 
    { 
     _viewToTransform = viewToTransform; 

     _newLeftMargin = newLeftMargin; 
    } 

    protected override void ApplyTransformation (float interpolatedTime, Transformation t) 
    { 
     var layoutParams = (LinearLayout.LayoutParams)_viewToTransform.LayoutParameters; 
     layoutParams.LeftMargin = (int)(_newLeftMargin * interpolatedTime); 
     _viewToTransform.LayoutParameters = layoutParams; 
    } 
} 

// View that will be animated: 
var button = FindViewById<Button> (Resource.Id.myButton); 

// Animation object: 
var a = new ViewLeftMargingAnimation (button, 150); 

// Animation's duration: 
a.Duration = 500; 

// Start my animation 
button.StartAnimation (a); 

この可能性がありますが、私たちが持っているXamarin.Androidにそれを変換するために提供されたリンクを使用し

ValueAnimatorクラスを使用しても可能です。 Xamarin.Androidのアニメーションの詳細here

+0

ああ私は前にこれをやった。これはまさに私が探していたものです、ありがとう! – LampShade

関連する問題