Android:在多个linearLayouts之间重新排列子项

时间:2016-11-22 11:01:39

标签: android android-layout layout android-animation

我正致力于为不同的布局设置动画片,以模拟足球的形成。

例如。这是配置1:

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


 1        2        3       4

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


      5        6        7

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


      8        9        10

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

上面的数字是各个水平LinearLayouts内的图像视图。我想要切换到配置2(在最顶层的LinearLayout中包含5个数字,在中间布局中包含2个。下限不变。)

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


 1      2      3     4     5

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


           6        7

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


      8        9        10

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

现在,到目前为止,我能够在线性布局中动态添加和删除imageView。然而,过渡似乎非常突然。所以我想知道是否可以使用动画来显示:

  1. 上层布局元素因新到达而调整其位置。
  2. 5号从中间移动到顶部。
  3. 中间行元素调整其位置以便考虑删除。
  4. 需要注意的是,由于Number 5不再是mid布局的成员,因此可以显示它的转换。

    编辑:上面的配置更改只是一个代表性的例子。实际上,可以存在多种形式,并且可以从任何一种形成过渡到任何其他形式。该解决方案也必须是“流动的”并且不依赖于硬编码的像素值。到目前为止,由于删除或添加,我可以处理重新排列部分(当然没有动画)。

1 个答案:

答案 0 :(得分:0)

要解决您的问题,我将使用翻译动画。

以下是如何操作的示例。

SELECT 
  p.title AS package_title,      
  tbl_min_value.min_price AS min_price 
FROM
  (SELECT 
    fixture_id,
    MIN(deal_price) AS min_price 
  FROM
    fixtures_deal 
  GROUP BY fixture_id) AS tbl_min_value 
  JOIN fixtures AS f 
    ON f.id = tbl_min_value.fixture_id 
  RIGHT JOIN packages AS p 
    ON f.package_id = p.id 
GROUP BY p.id 

您可以使用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();

获取每个视图的位置