首页 > 解决方案 > 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);


    }
}

提前致谢。

标签: android

解决方案


如果您使用 onTouchEvent() 方法拦截 Activity 或 View 中的触摸事件。当触摸事件的压力、大小、位置等发生变化时,甚至当新手指放在触摸屏上时,都会多次调用此方法。


推荐阅读