0

EditText フィールドの入力を変更するには、2 つの方法を使用したいと考えています。EditText フィールドは、数値 ("12.34" 形式) のみを許可します。

通常 の動作: ユーザーが EditText に触れると、キーボードが表示され、通常の EditText フィールドのように動作します。

動作の移動 ユーザーがタッチして上下にドラッグすると、EditText をインクリメント/デクリメントしたいと思います。

もっと多くの人が同様の実装を持っていると思うので、私はこのタイプの実装を探しましたが、それを見つけることができませんでした.

昨日、次のコードを試しましたが、うまくいきません。ドラッグ中にキーボードが表示されたままになり、スリープを使用することもあまり良い実装ではありません。

ここの誰かがより良い解決策を教えてくれることを願っています。

前もって感謝します!

inputET.setOnTouchListener(otl);

private OnTouchListener otl = new OnTouchListener() {
   public boolean onTouch (View v, MotionEvent event) {

    if (v == inputET) {
        // to distinguish between touch and drag
        if (event.getX > 50) { // drag
            float oldPos = event.getX;
            thread.sleep(10);
            inputET.setText(Float.toString(Float.parseFloat(inputET.getText()) - oldPos - event.getX);
            return true;
        } else { // touch
            return false;
        }
   }
};
4

2 に答える 2

1
float mLastMotionX;
@Override
public boolean onTouch(View v, MotionEvent ev) {
    // TODO Auto-generated method stub

    final int action = ev.getAction();
    final float x = ev.getX();
    switch (action) {
    case MotionEvent.ACTION_DOWN: 
    {
        mLastMotionX = x;
        break;
    }

    case MotionEvent.ACTION_MOVE: 
    {
        final int deltaY = (int) (x - mLastMotionX);

        if( Math.abs(deltaY) % 50 == 0 && deltaY != 0)
        {
            mLastMotionX  = x;
            float current = Float.valueOf(mTextView.getText().toString()) + deltaY;
            mTextView.setText("" + round(current, 2.0));
        }
        break;
    }


    }
    return true;
}


private double round( final float value, double precision  )
{
    precision = Math.pow(10, precision);
    return Math.round(value * precision) / precision;
}

EditText10.34 などの初期テキストを設定する必要があります。

于 2013-04-17T09:03:49.167 に答える