0

我想使用两种方法来更改我的 EditText 字段的输入。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 回答
1

您的代码没问题,只需删除线程的睡眠并将其添加到显示 EditText 的活动中:

android:windowSoftInputMode="stateHidden"

我还会将此添加到您的 if 条件中:

if (event.getAction() == MotionEvent.ACTION_MOVE && event.getX() > 50)

在我的设备(Android > 4.0)中测试并且可以工作,希望它可以帮助你:)

于 2013-04-17T08:52:12.073 回答