过渡/动画(onTouchListener)

Transition / Animation (onTouchListener)

所以这是简单转换的代码,从top_left到bottom_right,我不明白为什么我必须return false 才能正常工作,

1.If 我设置 return true,一次触摸,它将计数器从 0 设置为 3,或者简单地将 2 或 3 添加到计数器并且大部分时间保持在当前状态位置。

2.If 我设置了 return false,程序运行良好并且执行所写的内容,即 counter++;

public class MainActivity extends AppCompatActivity {
    Button b;
    TextView tv;

    public static int counter_button=0,counter=0;
    RelativeLayout.LayoutParams old_rules;
    RelativeLayout rl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b= (Button) findViewById(R.id.b1);
        tv= (TextView) findViewById(R.id.tv1);
        rl= (RelativeLayout) findViewById(R.id.rl);
        old_rules= (RelativeLayout.LayoutParams) b.getLayoutParams();
        rl.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
               my_changes_touch();
                return false;
            }
        });
    }

    public void my_changes_touch(){

        RelativeLayout.LayoutParams rules= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
        if(counter%2==0) {
            counter++;
            tv.setText(" "+counter);
            rules.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            rules.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            b.setLayoutParams(rules);
            rules.height=400;
            rules.width=400;
            b.setLayoutParams(rules);
            getContentTransitionManager().beginDelayedTransition(rl);
        } else {
            counter++;
            tv.setText(" "+counter);
            b.setLayoutParams(old_rules);
            getContentTransitionManager().beginDelayedTransition(rl);
        }    
    }
}

return 值决定事件是否被视图消耗。

如此真实意味着您也对其他活动感兴趣。

如果你 return false 那么触摸事件将被传递到视图层次结构中更上层的下一个视图,你将不会收到任何进一步的调用。

请检查这个答案