2016-11-22 11 views
1

私はフットボールの形成をシミュレートするために、さまざまなレイアウトにまたがる画像ビューをアニメーション化する作業に取り組んでいます。Android:複数のlinearLayoutsの間で子供の並べ替え

たとえば、これは設定です1:

=============================== 


1  2  3  4 

=============================== 


     5  6  7 

=============================== 


     8  9  10 

=============================== 

上記の数値は、それぞれの水平線LinearLayouts内の画像ビューです。私は、これは設定2に切り替えたい(真ん中レイアウトの一番上のLinearLayoutと2の5つの数字が含まれています。下は変更されません。)

=============================== 


1  2  3  4  5 

=============================== 


      6  7 

=============================== 


     8  9  10 

=============================== 

さて、これまでのところ、私は動的に内部imageViewsを追加および削除することができています線形レイアウト。しかし、その移行は非常に急なようです。アニメーションを使って次のことを示すことができるかどうかを知りたかったのです。

  1. 新しいレイアウトが原因で位置が調整されました。
  2. 番号5が中から上に移動します。
  3. 中間行要素は、削除を考慮して位置を調整します。

数字5はもはや中間レイアウトのメンバーではないため、移行が表示される可能性はありますか?

EDIT:上記のconfigの変更は、ほんの一例にすぎません。実際には、複数の編成があり、いずれかの編成から他の編成への移行が可能です。また、ソリューションは「流体」でなければならず、ハードコードされたピクセル値に依存しない。これまでのところ、削除や追加(もちろんアニメーションなし)による並べ替え部分の世話ができました。

+0

あなたのコードを共有したり、 – Godwin

+0

回避策、これはそれをよし – Godwin

+0

を行う方法ではありませんすることができます。私はある時間でコードを共有します。 (それは別のマシン上にあります)。正しい方法は何でしょうか?私はtableLayout、gridViewなども試みましたが、具体的な解決策はありませんでした。 –

答えて

0

あなたの問題を解決するために、翻訳アニメーションを使用します。

これを行う方法の例を次に示します。

RelativeLayout relativeLayout = new RelativeLayout(this); 
relativeLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
setContentView(relativeLayout); 

final ImageView imageView = new ImageView(this); 
imageView.setImageResource(R.drawable.ic_your_icon); 
relativeLayout.addView(imageView); 

final float amountToMoveRight = imageView.getX() + 100; 
final float amountToMoveDown = imageView.getY() + 100; 

TranslateAnimation anim = new TranslateAnimation(imageView.getX(), imageView.getX() + 100, imageView.getY(), imageView.getY() + 100); 
anim.setDuration(2000); 

anim.setAnimationListener(new TranslateAnimation.AnimationListener() { 

    @Override 
    public void onAnimationStart(Animation animation) { 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imageView.getLayoutParams(); 
     params.topMargin += amountToMoveDown; 
     params.leftMargin += amountToMoveRight; 
     imageView.setLayoutParams(params); 
    } 
}); 

imageView.startAnimation(anim); 

あなたはimageView.getX();を使用して、各ビューの位置を取得し、imageView.getY();

関連する問題