赞
踩
最近UI需要实现一个动画效果,button按下的时候缩小,松手的时候还原,但是点击事件依然生效。我琢磨了半天,感觉给这个button写个触摸事件,
- add = (Button) findViewById(R.id.add);
- add.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Log.e("dd", "onClick 点击了添加");
- }
- });
-
- add.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View view, MotionEvent event) {
- //按下操作
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- AnimatorSet set = new AnimatorSet();//组合动画
- ObjectAnimator scaleX = ObjectAnimator.ofFloat(add, "scaleX", 0.8f, 0.8f);
- ObjectAnimator scaleY = ObjectAnimator.ofFloat(add, "scaleY", 0.8f, 0.8f);
- set.setDuration(180);
- set.setInterpolator(new DecelerateInterpolator());
- set.play(scaleX).with(scaleY);//两个动画同时开始
- set.start();
-
- }
- //抬起操作
- if (event.getAction() == MotionEvent.ACTION_UP) {
- AnimatorSet set1 = new AnimatorSet();//组合动画
- ObjectAnimator scaleX1 = ObjectAnimator.ofFloat(add, "scaleX", 0.8f, 1.0f);
- ObjectAnimator scaleY1 = ObjectAnimator.ofFloat(add, "scaleY", 0.8f, 1.0f);
- set1.setDuration(180);
- set1.setInterpolator(new DecelerateInterpolator());
- set1.play(scaleX1).with(scaleY1);//两个动画同时开始
- set1.start();
-
- }
- //移动操作
- if (event.getAction() == MotionEvent.ACTION_MOVE) {
-
- }
- return true;//改为return false OnClickListener()才会生效
-
- }
- });
运行了一下,发现onClickListener()没有执行,原因是因为返回值为True,在android view事件分发机制中,onTouchListener()>onTouchEvent()>OnClickListener(),如果OnTouchListener()的返回值为True,则表示消耗此事件,不会往下传递,如果我们想要实现OnClickListener(),需要把return true 改为 false;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。