2

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

我在android的动画上遇到了一点麻烦,我希望有人能帮我解决这个问题。

我创建了一个线性布局和一个列表视图。

listView 放置在相对布局中,因为我必须在相同的相对布局中设置其他线性布局的 translateY,但我将其他线性布局排除在问题之外。

clicks or taps线性布局上的某个人(这将像一个按钮一样)时,列表视图将使用以下几行向下动画一点:

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(像素?)。

现在有更多代码可以将列表视图动画化回其原始位置,但我认为这与这个问题无关。(实际上是相同的,但是 fromYDelta 和 toYDelta 将被反转。)

当我在动画后点击列表视图(无论我点击哪里),它会回到原来的位置。但是我用过.setFillAfter(true),那为什么会发生在我身上呢?因为我只想让列表视图保持其新的给定位置。(动画的位置)

我希望有人可以帮助我完成我的动画,因为我被困在这个动画上。

4

2 回答 2

1

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

所以说重点。

我解决了自己的问题,但我认为这不是它要解决的方式。正如我在评论中提到的,Amokrane Chentir我发现当您禁用列表视图时,您不必设置物理位置。这意味着当我在动画完成并且列表视图被禁用时单击列表视图时,列表视图不会响应并且会忽略每个用户输入(和侦听器)。但是我可以用禁用的列表视图做什么,根本没有.

但是当动画执行一次时,列表视图不需要与用户交互,所以禁用是一件好事,离我的解决方案更近了一步。我唯一需要解决的是在动画再次反转的正确时刻启用列表视图。我通过禁用 listview 并使用 onClickListener 使 ListView 下方的 RelativeLayout 可单击来做到这一点。onClickListener 会在用户单击 listView 时进行侦听,将动画设置为反向并再次启用 listview。问题解决了。

这使得列表视图对用户交互不可见。

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

当点击 relativeLayout 时监控的 onClickListener。

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

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

于 2012-10-20T16:38:58.973 回答
0

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

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

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

于 2012-10-20T14:04:44.317 回答