点击视图时,动画会重新开始

时间:2012-10-20 13:52:41

标签: android animation

(本主题与.setfillafter(true)无关。)

我对android的动画有点麻烦,我希望有人可以帮我这个。

我创建了一个Linearlayout和一个列表视图。

listView被放置在相对布局中,因为我必须在相同的相对布局中设置另一个linearLayout的translateY,但我保留其他线性布局不在问题中。

如果某个clicks or taps位于linearlayout上(就像按钮一样),那么列表视图会使用以下几行向下动画:

animation_Fold = new TranslateAnimation(0, 0, 0, 150);
createNewAnimationListener(); //to monitor when the animation ends and starts.

animation_Fold.setDuration(300);
animation_Fold.setFillAfter(true);
listview_Contacts.startAnimation(animation_Fold); 

正如你所看到的,我创建动画,它会向下移动150(像素?)。

现在还有一些代码可以将listview设置回原来的位置,但我认为这与这个问题无关。 (它实际上是相同的,但是从YDelta到YDelta将会被逆转。)

当我点击动画后点击列表视图(无论我点击哪里),它都会回到原来的位置。 但我使用了.setFillAfter(true),为什么会发生这种情况呢?因为我只想让listview保持其新的给定位置。 (动画的位置)

我希望有人可以帮我完成我的动画,因为我遇到了这个。

2 个答案:

答案 0 :(得分:1)

好吧,我觉得有点奇怪,因为你们都认为我自言自语,我想回答自己的问题。但不,幸运的是情况并非如此。

所以非常重要。

我解决了自己的问题,但我不认为这是它的解决方式。 正如我在Amokrane Chentir的评论中提到的,我发现当您禁用列表视图时,您不必设置物理位置。 这意味着当我在完成动画时单击列表视图并且禁用列表视图时,列表视图不响应并将忽略每个用户输入(和监听器)。 但是,对于禁用的列表视图,我该怎么办,什么都不做。

但是当动画执行一次时,listview不需要与用户交互,因此禁用是一件好事,距离我的解决方案更近了一步。 我唯一需要解决的是在动画再次反转的时候启用listview。 我这样做是通过禁用listview并使用onClickListener使ListView下面的RelativeLayout可单击。 onClickListener在用户单击listView时进行侦听,反向设置动画并再次启用listview。 解决了问题。

这使得listview对用户交互不可见。

if(isUnfolded)
{
  listview_Contacts.setClickable(false);
  listview_Contacts.setEnabled(false);
}
else
{
  listview_Contacts.setClickable(true);
  listview_Contacts.setEnabled(true);
}

onClickListener监视单击relativeLayout的时间。

rlvLayout.setOnClickListener(new OnClickListener() 
{           
public void onClick(View v) 
    {
      if(isUnfolded)
         toggleFoldAnimation();
}
});

随意回答或添加评论以获得更好的解决方案,否则我希望此解决方案可以帮助其他人。

答案 1 :(得分:0)

所以基本上我认为发生的事情是你的视图从UI视角(它只是渲染)动画,但它的物理位置没有改变。您需要在动画结束时使用方法layout显式移动该视图。

animation_Fold.setAnimationListener(new AnimationListener() {
           @Override
            public void onAnimationEnd(Animation animation) {
                // Move your view here using view.layout(r, t, l, b)
            }
});

这样它会将你的视图移动到所需的位置。