【问题标题】:My onTouch method is not doing what it is programmed to do我的 onTouch 方法没有做它被编程做的事情
【发布时间】:2015-04-20 22:08:23
【问题描述】:

我正在制作一个 Android 应用程序。目标是制作圆圈,当触摸时会发生某些事情。更详细地说,这个应用程序将显示 2 种类型的圆圈,红色或绿色。圆圈的颜色存储在 lastColor 变量中。颜色的目的是当用户“触摸”红色或绿色圆圈时会发生一些事情。例如,如果触摸一个绿色圆圈,则会将一个点添加到该分数中,或者如果单击一个红色圆圈,则活动会发生变化,但是当任何一个圆圈被单击时,都不会发生任何事情。这是onTouch方法

public boolean onTouch(View v, MotionEvent event) {
   int x = (int) event.getX();
   int y = (int) event.getY();
   if(isInsideCircle(x, y) ==  true){
      //Do your things here
       if(redColor == lastColor){
          Intent i = new Intent(v.getContext(), YouFailed.class);
          v.getContext().startActivity(i);
       } else {
           addPoints++;
       }
   }else {

   }
   return true;
}

这部分代码是无法正常运行的部分。这是下面的整个课程。

public class DrawingView extends View {

    public DrawingView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub

    }

    RectF rectf = new RectF(0, 0, 200, 0);

    private static final int w = 100;
    public static int lastColor = Color.BLACK;
    private final Random random = new Random();
    private final Paint paint = new Paint();
    private final int radius = 230;
    private final Handler handler = new Handler();
    public static int redColor = Color.RED;
    public static int greenColor = Color.GREEN;
    int randomWidth = 0;
    int randomHeight = 0;
    public static int addPoints = 0;

    private final Runnable updateCircle = new Runnable() {
        @Override
        public void run() {
            lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
            paint.setColor(lastColor);
            invalidate();
            handler.postDelayed(this, 1000);
        }
    };

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        handler.post(updateCircle);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        handler.removeCallbacks(updateCircle);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // your other stuff here
        if (random == null) {
            randomWidth = (int) (random.nextInt(Math.abs(getWidth() - radius / 2)) + radius / 2f);
            randomHeight = (random.nextInt((int) Math.abs((getHeight() - radius / 2 + radius / 2f))));
        }
        else {
            randomWidth = (int) (random.nextInt(Math.abs(getWidth() - radius / 2)) + radius / 2f);
            randomHeight = (random.nextInt((int) Math.abs((getHeight() - radius / 2 + radius / 2f))));
        }

        canvas.drawCircle(randomWidth, randomHeight + radius / 2f, radius, paint);

        paint.setColor(Color.BLACK);
        paint.setTextSize(150);
        canvas.drawText("Score: " + addPoints, 120, 300, paint);
    }

    public boolean onTouch(View v, MotionEvent event) {
        int x = (int) event.getX();
        int y = (int) event.getY();
        if (isInsideCircle(x, y) == true) {
            //Do your things here
            if (redColor == lastColor) {
                Intent i = new Intent(v.getContext(), YouFailed.class);
                v.getContext().startActivity(i);
            }
            else {
                addPoints++;
            }
        }
        else {

        }
        return true;
    }

    public boolean isInsideCircle(int x, int y) {
        if ((((x - randomWidth) * (x - randomWidth)) + ((y - randomHeight) * (y - randomHeight))) < ((radius) * (radius)))
            return true;
        return false;
    }
}

【问题讨论】:

  • " 触摸时发生了什么事。" 比如什么? “这部分代码是不能正常工作的东西”怎么办?
  • 当绿色或红色圆圈被“触摸”时,它应该做一些事情。如果它是一个红色圆圈,它将显示另一个活动,如果它是一个绿色圆圈,它将添加一个点,但是当我点击任何地方时当然什么也没有发生
  • 它是崩溃还是什么都不做?您是否放置了日志和/或断点以查看调用/未调用的内容?就目前而言,这是一个相当广泛的问题,缺乏自我调试,这使得其他人难以解决。
  • 当我“触摸”或点击模拟器上的某些东西时不会崩溃,只是没有做任何事情
  • 日志或断点?像在 logcat 中一样记录? logcat 没有错误

标签: java android ontouchlistener touch-event ontouch


【解决方案1】:

您需要重写 onTouchEvent 函数。我测试了代码,它完全有效!另外,确保在 addPoints++ 之后返回 false 以确保只添加一个点。希望这对你有用!

@Override
public boolean onTouchEvent(MotionEvent event) {
    int x = (int) event.getX();
    int y = (int) event.getY();
    if (isInsideCircle(x, y)) {
        //Do your things here
        if (redColor == lastColor) {
            Intent i = new Intent(getContext(), null);
            getContext().startActivity(i);
        }
        else {
            addPoints++;
            return false;
        }
    }
    else {

    }
    return true;
}

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多