安卓 - 如何检测屏幕是否被触摸?

7

我目前正在使用onTouchEvent(MotionEvent me)来注册输入事件,但由于这是一个游戏应用程序,当帧率降低时,程序有时无法在释放GUI按钮后注册一个UP事件,这会导致我的角色继续移动...

API是否存在一种布尔方法,以检查屏幕上是否有手指呢?

谢谢。

4个回答

6

你可能需要查看 onUserInteraction() 的文档。

类似以下这样的代码可以帮助你知道用户最近与屏幕互动的时间:

@Override
public void onUserInteraction(){
    MyTimerClass.getInstance().resetTimer();
}

如果您想在任何应用程序上接收通知,而不仅仅是您自己的应用程序,该怎么办? - Jono
@jonney,如果你的应用程序可以检测到用户在另一个应用程序中正在做什么,那将是一种安全违规行为。这是不允许的 - 有很好的理由。 - setholopolus

2

你可以获取触摸事件并查看动作是否为按下、移动或松开等动作,但现在让我们停在这里。我有一个简单的例子,我认为你或任何人都会发现它有用。

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Toast;

public class MainActivity extends Activity {

    private boolean isTouch = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int X = (int) event.getX();
        int Y = (int) event.getY();

        int eventaction = event.getAction();
        switch (eventaction) {

        case MotionEvent.ACTION_DOWN:
            Toast.makeText(this, "ACTION_DOWN AT COORDS "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();         
            isTouch = true;
            break;

        case MotionEvent.ACTION_MOVE:
            Toast.makeText(this, "MOVE "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
            break;

        case MotionEvent.ACTION_UP:
            Toast.makeText(this, "ACTION_UP "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
            break;
        }
        return true;
    }
}

祝好!


0

0

确保我总是从OnTouchEvent返回true,而不是super.OnTouchEvent似乎已经解决了这个问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接