android中的运动事件捕获

android中的运动事件捕获,android,Android,我已经为一个应用程序编写了代码 应用程序布局如下所示 01 2 3 4 56789 现在,当用户触摸一个键(用户将手指放在按钮上,说5)时,其文本应在文本框中输入为“5向下”。但当用户释放键时,文本应设置为“5向上”。但在按键释放完成之前,如果用户用手指在布局上滑动至6,则应检测到它,并将文本设置为“向下6”。它应该这样进行,但是当用户释放键时,文本应该设置为“向上当前触摸的键”。我用过上下移动,但我不知道如何准确地完成它。请为我解释一下这个问题。当我从5滑到6时,事件仍然处于“向下5”,但当我

我已经为一个应用程序编写了代码

应用程序布局如下所示

01 2 3 4

56789

现在,当用户触摸一个键(用户将手指放在按钮上,说5)时,其文本应在文本框中输入为“5向下”。但当用户释放键时,文本应设置为“5向上”。但在按键释放完成之前,如果用户用手指在布局上滑动至6,则应检测到它,并将文本设置为“向下6”。它应该这样进行,但是当用户释放键时,文本应该设置为“向上当前触摸的键”。我用过上下移动,但我不知道如何准确地完成它。请为我解释一下这个问题。当我从5滑到6时,事件仍然处于“向下5”,但当我取下手指时,它设置为“向上5”。但我希望采用滑动法。所以,请给我一些如何做到这一点的想法

这是我的密码

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

    // select_btn = (Button) findViewById(R.id.ok);
    // home_btn = (Button) findViewById(R.id.home);
    et = (EditText) findViewById(R.id.entry);
    et.setText("", TextView.BufferType.EDITABLE);
    b = new Bundle();


    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    for (int i = 0; i < mybtn.length; i++) {
        String btnid = "btn" + i;
        int resid = getResources().getIdentifier(btnid, "id",
                getPackageName());
        mybtn[i] = (Button) findViewById(resid);
        mybtn[i].setOnTouchListener(this);

    }



}


@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    String s = null;
    s = ((Button) v).getText().toString().trim();
    switch (event.getAction()) {
    // case MotionEvent.ACTION_MOVE:
    // Do some stuff
    // et.setText("move android"+s, TextView.BufferType.EDITABLE );
    // break;

    case MotionEvent.ACTION_DOWN:
        et.setText("down android" + s, TextView.BufferType.EDITABLE);
        // Do some stuff
        break;
    case MotionEvent.ACTION_UP:
        et.setText("up android" + s, TextView.BufferType.EDITABLE);

    }
    return true;
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//选择_btn=(按钮)findviewbyd(R.id.ok);
//home_btn=(按钮)findviewbyd(R.id.home);
et=(EditText)findViewById(R.id.entry);
et.setText(“,TextView.BufferType.EDITABLE);
b=新的束();
试一试{
《睡眠》(2000年);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
对于(int i=0;i
我没有测试它,但我想它应该可以工作:

private int currentSelected = 0;

@Override
public boolean onTouch(View v, MotionEvent event)
{
    String s = null;

    s = ((Button) v).getText().toString().trim();

    switch (event.getAction())
    {

        case MotionEvent.ACTION_DOWN:

            currentSelected = Integer.valueOf(s);
            et.setText("down android" + s, TextView.BufferType.EDITABLE);
            break;

        case MotionEvent.ACTION_UP:
            et.setText("up android" + currentSelected, TextView.BufferType.EDITABLE);
            break;

        case MotionEvent.ACTION_MOVE:
            if (Integer.valueOf(s) != currentSelected)
            {
              et.setText("down android" + s, TextView.BufferType.EDITABLE);
              currentSelected = Integer.valueOf(s);
            }
            break;

    }
    return true;
}

发布一些您所做的代码/xml我已经尝试了MOTION\u UP、MOTION\u DOWN、MOTION\u MOVE和其他一些值,但我不知道如何获得它。请帮助mei认为需要使用onInterceptTouchEvent处理它。我不理解它。请建议您的viewsIt不工作,应用程序正在以旧方式打开和工作,在一段时间后通过抛出一些运行时异常强制关闭