13

我有一个包含项目的 ListView。当用户单击一个项目时,它的高度应该缩放为零,并且下面的所有项目都应该向上滚动。我下面的代码不起作用。使用我的代码,单击的项目向右缩放,但下面的项目不会向上滚动,它们保持在同一位置。我也用 LinearLayout 试过,但也有同样的问题。

有一个应用程序可以做到这一点。它被称为任务

这张小图应该能说明问题

我当前的实现如下所示:

@Override
public void onItemClick(AdapterView<?> arg0, View v, final int index,
        long id) {
    Animation anim = AnimationUtils.loadAnimation(getActivity(),
            R.anim.scaleup);
    v.startAnimation(anim);
}

<set android:shareInterpolator="false" >
    <scale
        android:duration="700"
        android:fillAfter="false"
        android:fillBefore="false"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotY="0%"
        android:toXScale="1.0"
        android:toYScale="0.0" />
</set>

4

3 回答 3

7

这是我制作的一个类(根据我在此处找到的源代码进行了修改),它可能会为您提供所需的功能。

public class FadeUpAnimation extends Animation {

int mFromHeight;
View mView;

public FadeUpAnimation(View view) {
    this.mView = view;
    this.mFromHeight = view.getHeight();
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    int newHeight;
    newHeight = (int) (mFromHeight * (1 - interpolatedTime));
    mView.getLayoutParams().height = newHeight;
    mView.setAlpha(1 - interpolatedTime);
    mView.requestLayout();
}

@Override
public void initialize(int width, int height, int parentWidth,
        int parentHeight) {
    super.initialize(width, height, parentWidth, parentHeight);
}

@Override
public boolean willChangeBounds() {
    return true;
}
}

然后这就是我使用它的方式

View tv = ...
Animation a = new FadeUpAnimation(tv);
a.setInterpolator(new AccelerateInterpolator());
a.setDuration(300);
tv.setAnimation(a);
tv.startAnimation(a);

您可以使用它来查看是否可以满足您的需求。

于 2012-08-17T18:14:38.820 回答
3

你会再次使用点击的项目吗?如果没有,那么你可以

  1. 等到动画结束
  2. 从存储底层数据的任何位置删除项目
  3. 然后调用 listadapter 的 notifyDataSetChanged() 方法
于 2012-08-17T18:04:45.630 回答
0

Android 不像 HTML,当您更改视图中的宽度、高度或可见性时,其他视图不会更新它们的位置。如果您需要这样做,您必须单独更新所有列表视图和您的内部视图。这是一个复杂的代码。

于 2012-08-17T17:33:40.937 回答