【Android控件】呼吸效果的动画

来源:互联网 发布:中国出境旅游数据 编辑:程序博客网 时间:2024/04/28 22:02

由于只是展示上的,就不需要使用属性动画。直接使用的补间动画,简单的动画。

public class MainActivity extends Activity {    private ImageView mImageView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mImageView = (ImageView) findViewById(R.id.testview); // 普通的imageview        mImageView.setOnLongClickListener(new OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                hideRepeatBtn();                return false;            }        });        mImageView.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                showRepeatBtn();            }        });        showRepeatBtn();    }    /**     * 显示呼吸效果动画     */    private void showRepeatBtn() {        mImageView.setOnTouchListener(new OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                // 触摸时取消动画,并缩小,有按下的感觉                if (event.getAction() == MotionEvent.ACTION_DOWN                         || event.getAction() == MotionEvent.ACTION_MOVE) {                    mImageView.setScaleX(0.9f);                    mImageView.setScaleY(0.9f);                    if (mImageView.getAnimation() != null) {                        mImageView.getAnimation().cancel();                    }                } else { // 松手后,恢复大小,并继续呼吸效果                    mImageView.setScaleX(1.0f);                    mImageView.setScaleY(1.0f);                    if (mImageView.getAnimation() != null) {                        mImageView.getAnimation().start();                    }                }                return false;            }        });        // 放大小时view,完全显示后开始呼吸效果        ScaleAnimation enterAnim = new ScaleAnimation(0f, 1.1f, 0f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);        enterAnim.setDuration(300); // 默认只执行一遍        enterAnim.setAnimationListener(new AnimationListener() {            @Override            public void onAnimationStart(Animation animation) { }            @Override            public void onAnimationRepeat(Animation animation) { }            @Override            public void onAnimationEnd(Animation animation) {                ScaleAnimation anim = new ScaleAnimation(1.0f, 1.1f, 1.0f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);                anim.setDuration(750);                anim.setRepeatMode(Animation.REVERSE); // 放大并缩小,时间为750*2                anim.setRepeatCount(Animation.INFINITE); // 无限循环                mImageView.setAnimation(anim);                mImageView.startAnimation(mImageView.getAnimation());            }        });        mImageView.startAnimation(enterAnim);    }    /**     * 动画隐藏连发按钮     */    private void hideRepeatBtn() {        // 缩小退出        ScaleAnimation anim = new ScaleAnimation(1.1f, 0f, 1.1f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);        anim.setDuration(300);        anim.setAnimationListener(new AnimationListener() {            @Override            public void onAnimationStart(Animation animation) { }            @Override            public void onAnimationRepeat(Animation animation) { }            @Override            public void onAnimationEnd(Animation animation) {                if (mImageView.getAnimation() != null) {                    mImageView.getAnimation().cancel();                }            }        });        mImageView.startAnimation(anim);    }}
0 0