Вопрос

У меня есть класс по имени точка, и многие экземпляры этого же класса создаются при запуске приложения. Проблема в том, что мне нужно иметь возможность щелкнуть на одном из экземпляров этого класса и нажатием экземпляра только изменения цвета.

Проблема в том, что когда я нажимаю на одно из экземпляров точек, все они меняют цвет вместо того, чтобы только тот, который я нажал.

Вот код:

    package com.ewebapps;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

public class Dot extends View {
     private final float x;
     private final float y;
     private final int r;
     private final Paint mBlack = new Paint(Paint.ANTI_ALIAS_FLAG);
     private final Paint mWhite = new Paint(Paint.ANTI_ALIAS_FLAG);
     private final Paint mGreen = new Paint(Paint.ANTI_ALIAS_FLAG);
     private boolean touched;

     public Dot(Context context, float x, float y, int r) {
         super(context);
         mBlack.setColor(0xFF000000); //Black
         mWhite.setColor(0xFFFFFFFF); //White
         mGreen.setColor(0xFF00FF00); //Green
         this.x = x;
         this.y = y;
         this.r = r;
     }

     @Override
  public boolean dispatchTouchEvent(MotionEvent event) { // On touch.
      touched = true;
      //mPaint.setColor(0xFF00FF00); // Turn dot green.
      this.invalidate();
         return super.dispatchTouchEvent(event);
     }

     @Override
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
         canvas.drawCircle(x, y, r+2, mWhite); //White stroke.

         if(!touched)
         {
          canvas.drawCircle(x, y, r, mBlack); //Black circle.
         }
         else
         {
          canvas.drawCircle(x, y, r, mGreen); //Green circle.
         }
     }

}
Это было полезно?

Решение

Мы не имеем представления, как вы объявляете или призываете или создаете эти взгляды, поэтому мы понятия не имеем, как вам помочь.

Единственное, что я могу сказать, это то, что диспетченьюУевают не то же самое, что и онтуушент

Похоже, Dispatchtuchevent называется всякий раз, когда на экране есть какое-либо сенсорное событие, а не на вас. Таким образом, все ваши взгляды получают сенсорное событие, затем настроить true.

Called to process touch screen events. You can override this to intercept all touch screen events before they are dispatched to the window. Be sure to call this implementation for touch screen events that should be handled normally.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top