سؤال

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

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

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

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

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

المحلول

حسنًا ... عند إنشاء وجهات نظرك الخاصة ، فإن أفضل طريقة لإنجازها هي التي تتجاوز dispatchTouchEvent طريقة. صدقني ، باستخدام setOnTouchListener و onTouchEvent لا تعمل بشكل جيد في بعض السيناريوهات. هذا كل ما عليك فعله في View:

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    // put your logic here  

    return super.dispatchTouchEvent(event);
}

نصائح أخرى

توثيق مع مثال

View aView = (View)findViewById(R.id.DotView);
aView.setOnTouchListener(this);

مثال كامل هنا

تعمل إجابة Aaron Saunders في طرق العرض (مثل الأزرار) لأن onTouchListener يخبرك فقط عن العرض الذي تم النقر عليه وليس بالضبط أين. إذا كنت بحاجة إلى معرفة أين كان الحدث بالضبط دون إنشاء أزرار ، جرب هذا في فئة النشاط الخاصة بك:

@Override onTouchEvent(MotionEvent event) { int _x = event.getX();
int _y = event.getY(); // do stuff }

ملاحظة: لا يتم استدعاء Ontouchevent إلا عندما لا يتم التعامل مع الحدث بواسطة عرض.
توثيق

(هل يمكن لأحد أن يخبرني كيف أضيف فواصل الخط؟)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top