51

私はクライアント用のAndroid2.2.2アプリケーションを開発していますが、彼は次のことをしたいと考えています。

これで、onClickイベントのあるボタンができましたが、彼は気に入らないので、ユーザーがボタンを離したときに検出したいと考えています。

これが私が使用する必要があると思うView.OnTouchListenerを見つけましたが、onClickで行ったようにこのイベントをxmlに追加する可能性はありますか?

<ImageButton
    android:id="@+id/btnSaveNewGate"
    android:layout_width="@dimen/btnSaveNewGate_width"
    android:layout_height="@dimen/btnSaveNewGate_height"
    android:layout_below="@+id/radioGrGateType"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="@dimen/btnSaveNewGate_marginTop"
    android:background="@null"
    android:contentDescription="@string/layout_empty"
    android:onClick="onSaveNewGateClick"
    android:scaleType="fitXY"
    android:src="@drawable/save_gate_selector" />

さらに2つの質問があります。

ユーザーが指を離したときに関連付けられるイベントはどれですか?

View.OnTouchListener代わりに使用を禁止するガイドラインはありますonClickか?

4

4 に答える 4

89

ユーザーが指を離したときのイベントはMotionEvent.ACTION_UPです。onClick() の代わりに View.OnTouchListener の使用を禁止するガイドラインがあるかどうかはわかりませんが、おそらく状況によって異なります。

サンプルコードは次のとおりです。

imageButton.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP){

            // Do what you want
            return true;
        }
        return false;
    }
});
于 2012-07-27T15:12:21.000 に答える
16

OnTouchListenerおそらく、ではなくを使用したい場合OnClickListenerは、 の追加機能OnTouchListenerが必要になります。これは、 の使用方法の詳細を示すための補足的な回答OnTouchListenerです。

リスナーを定義する

これをアクティビティまたはフラグメントのどこかに配置します。

private View.OnTouchListener handleTouch = new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        int x = (int) event.getX();
        int y = (int) event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.i("TAG", "touched down");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.i("TAG", "moving: (" + x + ", " + y + ")");
                break;
            case MotionEvent.ACTION_UP:
                Log.i("TAG", "touched up");
                break;
        }

        return true;
    }
};

リスナーを設定する

リスナーをonCreate(アクティビティの場合) またはonCreateView(フラグメントの場合) に設定します。

myView.setOnTouchListener(handleTouch);

ノート

  • getXビューにgetY相対的な座標 (つまり、ビューの左上隅) を指定します。ビューの上または左に移動すると、負になります。絶対スクリーン座標が必要な場合は、getRawXandを使用します。getRawY
  • xとの値を使用して、yスワイプの方向などを決定できます。
于 2016-09-20T07:59:39.133 に答える
6

OnClick は、ユーザーがボタンを離したときにトリガーされます。ただし、TouchListener を引き続き使用する場合は、コードに追加する必要があります。それはただ:

myView.setOnTouchListener(new View.OnTouchListener()
{
    // Implementation;
});
于 2012-07-27T15:07:00.730 に答える