2010-11-01 20 views
0
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. 
    } 

} 
+0

你想知道屏幕已被點擊或被點擊嗎? – John 2010-11-02 01:05:08

+0

我有很多這些類被一個計時器點擊,我需要能夠告訴他們哪個被點擊。 – Eweb 2010-11-02 05:10:21

回答

1

嗯......創建自己的觀點時,最好的方式來實現這一目標被重寫dispatchTouchEvent方法。相信我,使用setOnTouchListeneronTouchEvent在某些情況下效果不佳。這就是你需要做的所有事情View

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

    return super.dispatchTouchEvent(event); 
} 
+0

因此,使用這種方法我能夠測試我在邏輯中點擊了哪個類的實例? (我有很多這些類正在創建,我需要能夠分辨哪個被點擊。)感謝大家的幫助!其他地方的其他人都無法回答我的問題! – Eweb 2010-11-02 05:12:50

+0

當然,您可以知道該類的哪個實例被點擊了,畢竟,您在邏輯部分中所做的全部屬於該實例。我認爲你可以使用觀察者設計模式來完成你的目標,所以繼續前進,搖滾! – Cristian 2010-11-02 05:20:22

+0

非常感謝我到目前爲止嘗試了所有這些答案,而你的工作就是這樣。有一件事,無論如何,這是一個「私人」布爾值,以便該對象的所有其他實例不會收到我this.invalidate();呼叫? (當它重新繪製一個新的精靈。) – Eweb 2010-11-02 21:31:07

0

documentation with example

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

Full Example Here

+0

如果我有更多的點視圖,我可以通過使用你的方法來確定哪個點擊了嗎?謝謝您的幫助! – Eweb 2010-11-02 05:15:48

+0

是的,聽衆傳遞給你視圖對象 – 2010-11-02 05:27:31

0

亞倫桑德斯的答案適用於視圖(如按鈕),因爲只有onTouchListener告訴你被點擊了什麼看法,而不是確切位置。如果您需要確切地知道該事件是不創建按鈕試試這個在您的活動類:

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

注:當事件不是由視圖處理的onTouchEvent只調用。
Documentation

誰能告訴我如何添加換行符?

+0

所以我在考慮爲這個類添加一個名爲dotnumber的參數,如果我有這個點的許多實例,並且每個點的點號都不相同,我可以觸摸它並擁有它告訴我它使用這種方法的點號是什麼?感謝支持,非常感謝我的朋友! – Eweb 2010-11-02 05:14:33

+0

是的,您可以使用傳遞給onTouchEvent的事件的x和y座標來查看屏幕被點擊的位置是否與您的點之一相同。 – John 2010-11-02 16:09:15

相關問題