0

これが top_left から bottom_right への単純な遷移のコードです。onTouch() が正しく機能するために false を返さなければならない理由がわかりません。

1. return true を設定した場合、 one a single touch 、カウンターを 0 から 3 に設定するか、単にカウンターに 2 または 3 を追加し、ほとんどの場合は現在の位置に留まります。

2.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);
        }    
    }
}
4

1 に答える 1

2

戻り値は、イベントがビューによって消費されるかどうかを決定します。

そう true は、他のイベントにも興味があることを意味します。

false を返すと、タッチ イベントはビュー階層のさらに上の次のビューに渡され、それ以上の呼び出しは受信されません。

この回答を確認してください https://stackoverflow.com/a/3756619/2783541

于 2016-06-30T05:19:32.660 に答える