触摸式 Android 缩放按钮

标签 android button timer scale ontouchlistener

我知道如何将按钮缩放到一个确定的值,但是有没有办法在用户触摸按钮时每次增加/减少按钮大小? 像这样:

Button myButton = (Button)findViewById(R.id.myButton);
    myButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                // Some timer action here or is there a better way?
                v.setScaleX(v.getScaleX() + 0.1f);
                v.setScaleY(v.getScaleY() + 0.1f);
                return true;
            }
            else if(event.getAction() == MotionEvent.ACTION_UP) {
                v.setScaleX(1);
                v.setScaleY(1);
                return true;
            }

            return false;
        }
    });

其他想法 - 不起作用:

    myButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                Timer timer = new Timer();
                TimerTask timerTask = new TimerTask() {
                    @Override
                    public void run() {
                      myButton.setScaleX(myButton.getScaleX() + 0.1f);
                      myButton.setScaleY(myButton.getScaleY() + 0.1f);
                    }
                };
                while(event.getAction() != MotionEvent.ACTION_UP){ //Seems to be an infinite loop
                    timer.schedule(timerTask, 100);
                }

            }
            else if(event.getAction() == MotionEvent.ACTION_UP) {
                v.setScaleX(1);
                v.setScaleY(1);
            }

            return false;
        }
    });

有没有办法用 xml(可绘制对象和动画)来完成所有事情?

最佳答案

尝试以下操作:

@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
    int action = motionEvent.getAction();
    if (action == MotionEvent.ACTION_DOWN) {
        v.animate().scaleXBy(100f).setDuration(5000).start();
        v.animate().scaleYBy(100f).setDuration(5000).start();
        return true;
    } else if (action == MotionEvent.ACTION_UP) {
        v.animate().cancel();
        v.animate().scaleX(1f).setDuration(1000).start();
        v.animate().scaleY(1f).setDuration(1000).start();
        return true;
    }

    return false;
}

这应该可以解决问题;)

关于触摸式 Android 缩放按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38474593/

相关文章:

javascript - 尝试在不刷新页面的情况下单击按钮显示新的随机值

c# - NET 3.5 中 Monitor.TryEnter 的替代方案

swift - 以编程方式约束按钮

android - 下拉按钮/微调器,就像谷歌设计规范中的那些

android - 有 Flow 版本的 flatMapIterable 吗?

android - Android中余弦正切对数等数学函数的输入

c++ - boost::asio::deadline_timer cancel() 方法未调用计时器处理程序

c# - 未将对象引用设置为对象实例(计时器数组)

Android - android.content.res.Resources$NotFoundException : Resource ID #0x0

java - 无法确定按钮是否被 native android 自动化/Java 禁用