أي شخص يعرف كيفية إرفاق مستمع اللمس بهذا الفئة؟
-
28-09-2019 - |
سؤال
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 إلا عندما لا يتم التعامل مع الحدث بواسطة عرض.
توثيق
(هل يمكن لأحد أن يخبرني كيف أضيف فواصل الخط؟)