当手指仍在屏幕上时,Android JazzHand设备会触发MouseEvent.ACTION_UP

时间:2014-11-14 04:52:31

标签: android multi-touch

我正在不同的Android手机上测试不同的多点触控追踪。运行Android KitKat 4.4.4的摩托罗拉Moto G具有JazzHand功能:它同时响应5个屏幕触摸。但是,有时当两个或多个手指仍在屏幕上时,它会停止响应触摸。

当手指仍然在屏幕上时,会不时触发使用MouseEvent.ACTION_UP响应getActionMasked()的MotionEvent。从那时起,没有检测到额外的触摸。你必须抬起所有手指,然后重新开始。

我正在使用一个基本的Hello World项目,只需稍作修改就可以调试它。 activity_main.xml和MainActivity.java文件的内容如下所示。输出应该是触摸点列表。抬起手指时,输出应为空白。但是,当您在屏幕上移动手指时,有时也会发生这种情况。

如果您可以在自己的多点触控Android设备上测试,我将不胜感激,如果这种情况发生在其他设备型号上,请告诉我。如果您可以提供解释或解决方法,那将非常感激。


activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
                tools:context=".MainActivity">

    <TextView
        android:text="@string/hello_world"
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</RelativeLayout>

MainActivity.java

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


public class MainActivity extends Activity {

    private TextView textView;

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

        textView = (TextView) findViewById(R.id.text_view);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        String points = "";
        int action = event.getActionMasked();

        if (action == MotionEvent.ACTION_CANCEL) {
            points = "Action cancelled";
        } else if (action != MotionEvent.ACTION_UP) {
            int size = event.getPointerCount();

            for (int ii = 0; ii < size; ii++) {
                points += "\n(" + event.getX(ii) + ", " + event.getY(ii) + ")";
            }
        }

        textView.setText(points);

        return true;
    }
}

0 个答案:

没有答案