我正在不同的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;
}
}