安卓屏幕缩放按钮触摸问题

7
我知道如何将按钮缩放到确定的值,但是否有一种方式可以在用户触摸它时按时间增加/减少按钮大小? 就像这样:
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(drawable和animations)完成整个过程?


这里有一个非常好的例子,可以帮助你实现你想要达到的目标。在教程中,使用的是ImageView进行动画处理,但你可以将其应用到你的按钮上。 - chejaras
这个回答解决了你的问题吗? [按下时动态减小按钮大小并在释放时恢复其大小] (https://dev59.com/1loU5IYBdhLWcg3wk3l2) - Valeriy Katkov
2个回答

12

尝试以下操作:

@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;
}

这应该就行了 ;)


这个可以正常工作,但是你必须在触摸按钮的同时移动手指才能增加大小。 - Maik
我编辑了我的回答。试一下,看看它是否符合你的要求。 - Alex Walger
好的,完成了! - Maik
我的问题是,如果你滑动手指从视图上离开并释放它,视图将停留在向下状态。 - passatgt
2
当 MotionEvent.ACTION_CANCEL 时取消动画是一个不错的选择。 - Vladislav Shcherbakov

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接