android - onTouchEvent() 方法被调用超过 7 次
问题描述
刚进入Android开发..请多多包涵。
我创建了一个重写的 onTouchEvent 函数。每次我触摸应用程序内部的某个地方时,我都希望它运行该函数两次。相反,该函数运行随机次数。有时是 7,有时是 12。我只是想知道这是否正常?
如果有人好奇,这是我的代码..
package com.jojocoder.subhunter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.view.Display;
import android.util.Log;
import android.widget.ImageView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
int numberHorizontalPixels;
int numberVerticalPixels;
int blockSize;
int gridWidth = 40;
int gridHeight;
float horizantalTouched = -100;
float verticalTouched = -100;
int subHorizaltalPosition;
int subVerticalPosition;
boolean hit = false;
int shotsTaken;
int distanceFromSub;
boolean debugging = true;
int testcount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
numberHorizontalPixels = size.x;
numberVerticalPixels = size.y;
blockSize = numberHorizontalPixels / gridWidth;
gridHeight = numberVerticalPixels / blockSize;
Log.d("Debugging","Running OnCreate func");
newGame();
draw();
}
public void newGame() {
Log.d("Debugging", "Running newGame func");
}
void draw() {
Log.d("Debugging", "Running draw func");
printDebuggingText();
}
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
testcount ++;
Log.d("Debugging", "Running OnTouchEvent func");
takeShot();
return true;
}
void takeShot() {
Log.d("Debugging", "Running takeShot func");
draw();
}
void boom() {
}
void printDebuggingText() {
Log.d("numberHorizantalPixels", "" + numberHorizontalPixels);
Log.d("numberVerticalPixels", "" + numberVerticalPixels);
Log.d("blockSize", "" + blockSize);
Log.d("gridWidth", "" + gridWidth);
Log.d("gridHeight", "" + gridHeight);
Log.d("horizantalTouched", "" + horizantalTouched);
Log.d("verticalTouhced", "" + verticalTouched);
Log.d("subHorizantalPosition", "" + subHorizaltalPosition);
Log.d("subVerticalPosition", "" + subVerticalPosition);
Log.d("hit", "" + hit);
Log.d("shotsTaken", "" + shotsTaken);
Log.d("debugging", "" + debugging);
Log.d("distanceFronSub", "" + distanceFromSub);
Log.d("testcount", "" + testcount);
}
}
提前致谢。
解决方案
如果您使用 onTouchEvent() 方法拦截 Activity 或 View 中的触摸事件。当触摸事件的压力、大小、位置等发生变化时,甚至当新手指放在触摸屏上时,都会多次调用此方法。
推荐阅读
- javascript - 从 .txt 文件读取并显示数据的 React 组件
- reactjs - 尝试导入错误:“更新”未从“@createjs/tweenjs”导出(导入为“TWEEN”)
- string - 使用不正确的字符串格式时如何从编译器获取消息
- java - while循环在java中没有停止
- xaml - 将属性绑定到列表视图
- python - Python 不会忽略文件中的单词
- java - 如何从输入 1 的值显示 for 循环中的数字?
- node.js - 代码给出类型错误 File.update 不是函数
- react-redux - Redux 中间件和 GraphQL
- mysql - 一个非常大的表的 SQL 分区