Android动画和过渡

Android动画和过渡,android,transition,Android,Transition,下面的代码应该是: 当我触摸屏幕时,按钮从左上到右下移动。如果我再次触摸屏幕,按钮将从右下角移动到左上角 但现在发生的是,当我触摸屏幕时,按钮开始从TL移动到BR,但随后它又跳回到TL角 我触摸屏幕的时间越长,按钮“移动”到BL角的时间就越长。 为什么呢?第一次触摸屏幕时,我必须改变什么才能使按钮朝一个方向移动,第二次触摸时,按钮朝另一个方向移动 @Override protected void onCreate(Bundle savedInstanceState) { super.on

下面的代码应该是:

当我触摸屏幕时,按钮从左上到右下移动。如果我再次触摸屏幕,按钮将从右下角移动到左上角

但现在发生的是,当我触摸屏幕时,按钮开始从TL移动到BR,但随后它又跳回到TL角

我触摸屏幕的时间越长,按钮“移动”到BL角的时间就越长。 为什么呢?第一次触摸屏幕时,我必须改变什么才能使按钮朝一个方向移动,第二次触摸时,按钮朝另一个方向移动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    state = false;
    myLayout = (ViewGroup)findViewById(R.id.main_layout);
    myLayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            moveButton();
            return true;
        }
    });
}

public   void moveButton() {
        View theButton = findViewById(R.id.button1);

        TransitionManager.beginDelayedTransition(myLayout); //for smooth transitioning

        //Change position
        RelativeLayout.LayoutParams posRules = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
        if ( state)         {
            posRules.addRule(RelativeLayout.ALIGN_PARENT_TOP);
            posRules.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

        }
        else {
            posRules.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            posRules.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        }

        theButton.setLayoutParams(posRules);

        //Change size
        ViewGroup.LayoutParams sizeRules = theButton.getLayoutParams();
        if ( state) {
            sizeRules.width = 250;
            sizeRules.height = 100;

        }
        else {
            sizeRules.width = 450;
            sizeRules.height = 300;
        }
        theButton.setLayoutParams(sizeRules);

        state = !state;
    }

每次触摸事件都会调用
onTouchListener
。例如,当您触摸屏幕时,会发送一个
操作_DOWN
。当您的手指抬起时,会发送一个
动作\u up
。你可以找到所有事件的解释

现在,每次触摸屏幕时,您都会收到至少两个对onTouchListener的调用。为了让它在每次触摸时只设置一次动画,我将执行如下操作,以便只在下触事件中执行

myLayout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            moveButton();
        }
        return true;
    }
});