3

オンライン コースの一環として、既存のコードを変更するように依頼されました。現在、アプリは、画面がタッチされた位置の x 座標と y 座標、およびミリ秒単位の時間を登録して表示します。

開始座標と終了座標の両方を取得する機能を追加したいと考えています。現在登録されている座標はエンディングのみのようです。両方の座標セットを追加するにはどうすればよいですか (モーション イベントの距離を計算したい場合など)。これがコードの一部です。ご協力いただきありがとうございます!

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    Calendar tiempoInicio = null;
    Calendar tiempoFinal = null;

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        int x = (int)event.getX();
        int y = (int)event.getY();
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
                tiempoInicio = Calendar.getInstance();
                break;
        case MotionEvent.ACTION_MOVE:
            break;
        case MotionEvent.ACTION_UP:
                tiempoFinal = Calendar.getInstance();


                Intent intent = new Intent (
                                   AplicacionSencillaActivity.this,
                                AplicacionSencillaResults.class);
                Bundle bundle = new Bundle();
                bundle.putLong(
                                "TIEMPOPRESIONADO",
                                tiempoFinal.getTimeInMillis() -
                                 tiempoInicio.getTimeInMillis());
                bundle.putInt("X", x);
                bundle.putInt("Y", y);

                intent.putExtras(bundle);
                startActivity(intent);
                break;
4

2 に答える 2

0

実際、あなたのコードはほとんど正しいです。ACTION_DOWN開始点とACTION_UP終了点が得られます。あなたの間違いはオーバーライドですonTouchEvent()-説明を読んでください。どのビューもタッチを処理しなかった場合にのみ呼び出されるため、子ビューの一部によってタッチが傍受される可能性があります。

代わりにオーバーライドdispatchTouchEvent()すると、すべてのタッチが得られます。呼び出すことを忘れないでください。そうしないとsuper.dispatchTouchEvent()、タッチがアクティビティのビューに配信されなくなります。

于 2012-07-03T16:33:19.317 に答える
0

開始座標を取得するには、移動の開始を表すため、イベント中にも取得getX()して保存する必要があります。getY()ACTION_DOWN

于 2012-07-03T16:28:23.703 に答える