user3775061
user3775061

Reputation: 145

Android padding left animation in RelativeLayout

I am trying to create a padding left animation in RelativeLayout. I wrote code which can animate left in click listener. This is my code, but it is not working completely.

list.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            holder = (UserHolder) view.getTag();

            layoutParams = (RelativeLayout.LayoutParams) holder.layoutmain
                    .getLayoutParams();
            if (holder.layout.getVisibility() != View.VISIBLE) {

                ValueAnimator varl = ValueAnimator.ofInt(-170);
                varl.setDuration(1000);

                varl.addUpdateListener(new AnimatorUpdateListener() {

                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {

                        layoutParams.setMargins(
                                (Integer) animation.getAnimatedValue(), 0,
                                0, 0);
                        holder.layoutmain.setLayoutParams(layoutParams);
                        holder.layout.setVisibility(View.VISIBLE);

                    }
                });
                varl.start();

            }
            else
            {
                ValueAnimator varl = ValueAnimator.ofInt(0);
                varl.setDuration(1000);

                varl.addUpdateListener(new AnimatorUpdateListener() {

                    @Override
                    public void onAnimationUpdate(
                            ValueAnimator animation) {

                        layoutParams.setMargins(0, 0,
                                (Integer) animation.getAnimatedValue(),
                                0);

                        // lp.setMargins(left, top, right, bottom)
                        holder.layoutmain.setLayoutParams(layoutParams);

                        holder.layout.setVisibility(View.INVISIBLE);

                    }
                });
                varl.start();
            }




        }

    });

The first time, it works (I can animate padding left), but the second time I click the animation is not working. What am I doing wrong?

Upvotes: 2

Views: 1435

Answers (2)

Vinit Saxena
Vinit Saxena

Reputation: 704

Through ValueAnimator class you can update margin or padding of any with animation. Please go through the following code :

 ValueAnimator animator = ValueAnimator.ofInt(0,50);
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator){
            frameLayout.setPadding(0, (Integer) valueAnimator.getAnimatedValue(),0,0);
        }
    });
    animator.setInterpolator(new DecelerateInterpolator(2));
    animator.start();

Let me know in case of more explanation in comments.

Upvotes: 3

user2641570
user2641570

Reputation: 814

You should try using ValueAnimator.ofInt(fromInt,toInt)

//first    
ValueAnimator.ofInt(-70,0)

//second
ValueAnimator.ofInt(0,-70)

Otherwise the value animator doesn't know from or to which value it should animate.

Upvotes: 0

Related Questions