LayoutAnimationController中的自定义排序

时间:2015-02-14 12:17:10

标签: android animation android-animation

如果我想在ListView的每个项目上添加一些延迟的动画,我使用LayoutAnimationController并指定延迟。但这里的动画顺序只能是NORMAL,REVERSE或RANDOM。

我正在制作动画,假设ListView的行是1,2,3,4,5。然后当我触摸第3行时,动画应该从第3行 - >第2行 - > ROW1。 在文档中,它提到我们应该覆盖

protected int getTransformedIndex (LayoutAnimationController.AnimationParameters params)

用于自定义排序但是我没有从这个函数中获得什么值以及如何在这种情况下计算自定义排序?

有没有其他方法可以实现这个动画?

1 个答案:

答案 0 :(得分:2)

可以这样完成自定义排序。

public class CustomAnimController extends LayoutAnimationController {

    private float mDelay;
    int mMiddlePosition;
    private View mView;
    private Context mContext;

    public CustomAnimController(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomAnimController(Animation animation) {
        super(animation);
    }

    public CustomAnimController(Context context,Animation animation, float delay) {
        super(animation, delay);
        mDelay=delay;
        mContext=context;
    }

    @Override
    protected long getDelayForView (View view){

        ViewGroup.LayoutParams params=view.getLayoutParams();
        LayoutAnimationController.AnimationParameters animationParameters=params.layoutAnimationParameters;

        int index=getTransformedIndex(animationParameters);

        return (long)(index*mDelay*200);

       //return 0;

    }


    @Override
    protected int getTransformedIndex (LayoutAnimationController.AnimationParameters params){

        int index=params.index;


        if(index==mMiddlePosition){

            return 0;
        }

        for(int i=1;i<20;i++){

            if(index==mMiddlePosition-i || index==mMiddlePosition+i){
                return i;

            }
        }

        return 0;


    }

}