Android 带有动画可见性切换的自定义ListView

Android 带有动画可见性切换的自定义ListView,android,listview,android-listview,android-animation,Android,Listview,Android Listview,Android Animation,我有一个自定义的Listview,里面有很多文本。。我希望在单击列表视图时,其他文本将显示在单击的行下。。我设法做到了这一点,在custom_row.xml中将TextView设置为GONE,然后在ClickListener中将其设置为VISIBLE。。但这太容易出错了,所以我想制作一个切换动画,比如《盲人秀》 如何在Android中制作动画?您可以创建自己的动画并更改项目的高度,如: public class ExpandAnimation extends Animation { ...

我有一个自定义的Listview,里面有很多文本。。我希望在单击列表视图时,其他文本将显示在单击的行下。。我设法做到了这一点,在custom_row.xml中将TextView设置为GONE,然后在ClickListener中将其设置为VISIBLE。。但这太容易出错了,所以我想制作一个切换动画,比如《盲人秀》


如何在Android中制作动画?

您可以创建自己的动画并更改项目的高度,如:

public class ExpandAnimation extends Animation {
...
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
       super.applyTransformation(interpolatedTime, t);
        if (interpolatedTime < 1.0f) {
            viewLayoutParams.height = heightStart + 
                    (int) (( heightEnd - heightStart) * interpolatedTime);
            animatedView.requestLayout();
        }
    }
}
public类ExpandAnimation扩展动画{
...
@凌驾
受保护的无效应用转换(浮点插值时间,转换t){
超级应用转换(插值时间,t);
如果(插值时间<1.0f){
viewLayoutParams.height=高度开始+
(int)((加高-高度开始)*插值时间);
animatedView.requestLayout();
}
}
}
并在单击项目时设置该动画。

使用将ListView的高度从0更改为最终高度

你可以找到一个很好的例子

守则如下:

ValueAnimator animator = ValueAnimator.ofInt(intialHeight, finalHeight);    
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator v) {
        int value = (Integer) v.getAnimatedValue(); // get the most recent value calculated by the ValueAnimator 
        ViewGroup.LayoutParams lp = yourLayout.getLayoutParams(); // get the height of your ListView
        lp.height = value; //change the height
        mLinearLayout.setLayoutParams(layoutParams); //update it to the view
    }   
animator.start(); //start the animation