仿微信相册旋转箭头 - 不恢复原位 - androi view旋转180属性动画

仿微信相册箭头旋转 - 不恢复原位 - androi view旋转180

在这里插入图片描述
在这里插入图片描述

思路:利用属性动画,动态设置view的旋转角度

1 、创建旋转动画 res/anim/rotate_view.xml




    

2、

1)创建 ValueAnimator 属性动画 -起始角度(0-180)

        valueAnimator = ValueAnimator.ofInt(0, 180);
        valueAnimator.setDuration(300);

2)添加监听 关键-- 主要是在onAnimationEnd 动画结束的时候重新设置旋转的角度

            @Override
            public void onAnimationEnd(Animator animation) {
                //结束标记位
                if (currentMode == 0) {
                    valueAnimator.setIntValues(180, 360);
                    currentMode = 1;
                } else {
                    valueAnimator.setIntValues(0, 180);
                    currentMode = 0;
                }
            }

3) 设置点击监听即可

 valueAnimator.start();

整体代码 (view 即需要旋转的view)

public class PhoneSelectActivity extends AppCompatActivity implements View.OnClickListener {

    View view;

    int currentMode = 0;
    ValueAnimator valueAnimator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_phone_select);
        view = findViewById(R.id.view1);

        valueAnimator = ValueAnimator.ofInt(0, 180);
        valueAnimator.setDuration(300);
        
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int currentValue = (int) animation.getAnimatedValue();
                view.setRotation(currentValue);

            }
        });
        view.setOnClickListener(this);
        valueAnimator.addListener(new Animator.AnimatorListener() {

            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                //结束标记位
                if (currentMode == 0) {
                    valueAnimator.setIntValues(180, 360);
                    currentMode = 1;
                } else {
                    valueAnimator.setIntValues(0, 180);
                    currentMode = 0;
                }
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
    }

    /**
     * 返回上一个界面
     *
     * @param view
     */
    public void gotoBack(View view) {
        finish();
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.view1) {
            valueAnimator.start();
        }
    }

你可能感兴趣的:(动画,微信,android)