سؤال

لدي فصل يدعى DOT والعديد من الحالات من هذا الفئة نفسها عندما يتم تشغيل التطبيق. المشكلة هي أنني بحاجة إلى أن أكون قادرًا على النقر على أحد مثيلات هذه الفئة والحصول على مثيل تم النقر عليه فقط تغيير الألوان.

المشكلة هي كلما قمت بالنقر فوق أحد مثيلات DOT ، كلها تغير اللون بدلاً من فقط تلك التي نقرت عليها.

هذا هو الرمز:

    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.
         }
     }

}
هل كانت مفيدة؟

المحلول

ليس لدينا أي فكرة عن كيفية إعلانك أو الاتصال أو إنشاء هذه المشاهدات ، لذلك ليس لدينا أي فكرة عن كيفية مساعدتك.

الشيء الوحيد الذي يمكنني قوله هو أن DispatchTouchEvent ليس هو نفس الشيء مثل Ontouchevent

يبدو أن DispatchTouchEvent يسمى كلما كان هناك أي حدث تعمل باللمس على الشاشة ، وليس عليك. لذلك جميع وجهات نظرك تتلقى حدث اللمس ، ثم الإعداد إلى 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