7

私のアプリケーションでは、同じ textView でクリック イベントとドラッグ イベントの両方を使用する必要がありました。

私は次のコードを書きました:

... }
    switch(event.getAction()) {
        case MotionEvent.ACTION_UP:
//            TextDialog.setVisibility(View.VISIBLE);
            break;
        case MotionEvent.ACTION_DOWN: {
            disallowTouch(parent, true);
            int downX = (int)event.getX();
            int downY = (int)event.getY();
            return false; // allow other events like Click to be processed
        }
        case MotionEvent.ACTION_MOVE:
            int x = (int)event.getRawX();
            int y= (int)event.getRawY();

            layoutParams.leftMargin = x - 50;
            layoutParams.topMargin = y - 70;
                                       
            tvText.setLayoutParams(layoutParams);
            break;
        default:
            break;
    }
    return true;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    TextDialog.setVisibility(View.VISIBLE);
}

しかし、ACTION_MOVE働いているだけです。onClickイベントは発生していません。

TextView をクリックしたときにダイアログを表示したいだけです。

どうすればこれを達成できますか?

4

2 に答える 2

2

setOnTouchListenerとsetOnClickListenerを同時に使用する

onTouchで:

public boolean onTouch(View v, MotionEvent event) {
    ViewParent parent = v.getParent();
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN: {
        disallowTouch(parent, true);
        downX = event.getX();
        downY = event.getY();
        return false; // allow other events like Click to be processed
    }
}

private void disallowTouch(ViewParent parent, boolean isDisallow) {
    if (parent != null) {
        parent.requestDisallowInterceptTouchEvent(isDisallow);
    }
}
于 2013-02-01T07:59:46.190 に答える