我有一个带有项目的ListView。 当用户单击某个项目时,它的高度应该缩放为零,并且下面的所有项目都应向上滚动。 我下面的代码不起作用。 使用我的代码,点击的项目向右缩放,但下面的项目不向上滚动,它们保持在相同的位置。 我也尝试使用LinearLayout,但也存在同样的问题。
有一个应用程序可以做到这一点。它被称为Tasks。
我目前的实现如下:
@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>
答案 0 :(得分:7)
这是我制作的课程(从source I found here修改而来),可以为您提供所需的功能。
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);
您可以使用它来查看是否可以满足您的需求。
答案 1 :(得分:3)
您会再次使用点击的项目吗?如果没有,那么你可以
答案 2 :(得分:0)
Android不像HTML那样,当您更改视图中的宽度,高度或可见性时,其他视图不会更新其位置。 如果您需要这样做,则必须单独更新所有列表视图和内部视图。这是一个复杂的代码。