このクラスにタッチリスナーを添付する方法を知っている人はいますか?

StackOverflow https://stackoverflow.com/questions/4073957

質問

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 方法。私を信じて、使ってください setOnTouchListeneronTouchEvent いくつかのシナリオでうまく機能しないでください。これはあなたがあなたの中でしなければならないすべてです 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 Answersはビュー(ボタンなど)で機能します。これは、OntouchListenerがクリックされたビューだけでなく、正確な場所ではないことを教えているためです。ボタンを作成せずにイベントがどこにあるかを正確に知る必要がある場合は、アクティビティクラスでこれを試してください。

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

注:Ontoucheventは、イベントがビューで処理されない場合にのみ呼び出されます。
ドキュメンテーション

(誰かがラインブレークを追加する方法を教えてもらえますか?)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top