2011-06-01 29 views
0

我有一個主要的FrameLayout和5個7(每個視圖)下的球集合。我添加了onTouchEvent()來切換顏色。但無論我點擊哪一個球,只有右下角的球響應我的觸摸事件(這是最後一個繪製的)。有沒有辦法讓每個球識別自己的觸摸事件?Android,屏幕上有多個視圖,但只有一個會響應觸摸

一個想法:我認爲這可能是因爲我將每個球(一個視圖)插入到主要的FrameLayout中,它應該一次只顯示一件東西。我認爲它就像一堆視圖,只有最上面的一個正在迴應。有任何想法嗎?

在Ball類

public class Ball extends View { 
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    ... 
} 

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawCircle(x, y, r, mPaint); 
} 

public boolean onTouchEvent(MotionEvent event) { 
    int eventAction = event.getAction(); 

    if(eventAction == MotionEvent.ACTION_DOWN) { 
     switchcolor(); 
     this.postInvalidate(); 
     return true; 
    } else { 
     return false; 
    } 
} 

private void switchcolor() { 
    mPaint.setColor(touched ? 0xFFFFFFFF : 0xFFA606E2); 
    touched = !touched; 
} 

在主要活動

FrameLayout main = (FrameLayout) findViewById(R.id.main_view); 
... 

some loop { 
    main.addView(new Ball(this, x, y, radius - margin)); 
} 
+0

這一切都很好,但您的觸摸偵聽器代碼在哪裏? – dmon 2011-06-02 00:06:07

+0

@dmon oops我忘了。它現在在那裏。 :) – chizzle 2011-06-02 00:24:32

+0

Errrr ...和'switchcolor()'?基本上我們需要遵循流程貫穿始終。 – dmon 2011-06-02 00:27:49

回答

0

用2個LinearLayout(s)解決。

請參閱here以獲得很好的答案。我使用LinearLayout(s)和另一個TableLayout嘗試了兩個答案。使用LinearLayout的一個將保持單元大小相同,而不管文本的長度如何。

0

當你在創建自定義版本,只需創建一個名爲last一個或者類似的東西...外地和改變顏色如果這是最後一個:

some loop { 
    Ball ball = new Ball(this, x, y, radius - margin); 
    if(this is the last one) 
     ball.setLast(true); 
    else 
     ball.setLast(false); 
    main.addView(ball); 
} 

然後,在第e onTouchEvent中的Ball類:

if(isLast()){ 
    // do it 
} 
+0

謝謝你的回覆。我不確定我是否清楚描述了自己的問題。我希望每35個球都能認出自己的觸覺。目前,無論我點擊哪一個球,只有最後一個球會改變顏色,即使我點擊了其他球LOL! – chizzle 2011-06-01 23:46:04

相關問題