Wer weiß, wie ein Hauch Zuhörer zu dieser Klasse befestigen?
-
28-09-2019 - |
Frage
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.
}
}
Lösung
Nun ja ... wenn Sie Ihre eigenen Ansichten erstellen, der beste Weg, um das zu erreichen ist das Überschreiben der dispatchTouchEvent
Methode. Vertrauen Sie mir, mit setOnTouchListener
und onTouchEvent
nicht gut in einigen Szenarien arbeiten. Das ist alles, was Sie in Ihrem View
zu tun haben:
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// put your logic here
return super.dispatchTouchEvent(event);
}
Andere Tipps
View aView = (View)findViewById(R.id.DotView);
aView.setOnTouchListener(this);
Aaron Saunders Antwort arbeitet für Ansichten (wie Knöpfe), weil ein onTouchListener Sie nur sagt, was Ansicht geklickt wurde und nicht genau, wo. Wenn Sie genau wissen müssen, wo das Ereignis war ohne Knöpfe zu schaffen versuchen, dies in Ihrer Aktivitätsklasse:
@Override
onTouchEvent(MotionEvent event) {
int _x = event.getX();
int _y = event.getY();
// do stuff
}
. Hinweis: onTouchEvent wird nur aufgerufen, wenn das Ereignis von einer Ansicht nicht behandelt wird
Dokumentation
( Kann mir jemand sagen, wie Zeilenumbrüche hinzufügen? )