2012-02-12 76 views
2

我有一個帶有自定義視圖的LinearLayout。 veiw比佈局小1px。 我想要佈局改變它的背景顏色,當按下視圖或獲得聚焦。帶選擇器和自定義視圖的LinearLayout頂部

我已經實現了與佈局的drawables的選擇器,並且當我點擊佈局時,它全部變成了wroking。但是因爲只有1 px的可點擊空間,所以我希望自己的自定義視圖能夠更改下面的佈局的相關屬性。

有什麼辦法可以做到嗎?如果佈局未定製,自定義視圖是否可以將evnet分派給parrent佈局?

我可以很容易地改變背景顏色的佈局,只需通過訪問它的父母點擊視圖時,但我希望backgroud顏色爲shor時間轉而回到它的默認顏色。與ListView項目一樣。

感謝

回答

1

在ui線程中創建處理程序,作爲頂部的全局處理。

Handler handler = new Handler();

然後用它來改變你的佈局顏色回:

handler.postDelayed(new Runnable() 
    { 
     @Override 
     public void run() 
     { 

     } 
    }, 1000); 
+0

嗨諾亞感謝代碼,它看起來非常整齊。我認爲不適用這種選擇。謝謝你們倆。 – IronHide 2012-02-13 15:03:59

1

我猜你想改變背景顏色或圖片僅供點擊您的自定義視圖很短的時間。如果這是問題,您可以在自定義視圖的onClick()中調用以下方法

public void changeBg(){ 
    LinearLayout layout=(LinearLayout) findViewById(R.id.your_Layout_id); 
    Drawable temp=layout.getBackground(); 
    layout.setBackgroundResource(R.drawable.your_drawable); 
    try{ 
     Thread.sleep(2000); 
    }catch(Exception ex){} 
    layout.setBackgroundDrawable(temp); 
} 

我認爲這是您正在搜索的內容。

+0

您好感謝答覆。我知道這個選擇,但我想使用。 Thread.sleep不是在主UI線程中使用的最佳選擇。對不起,我沒有提到,這一切都在我的主UI線程中。 – IronHide 2012-02-13 08:22:42

+0

我可能會使用線程和處理程序,並將佈局傳遞給處理程序,並在那裏更改背景一秒。但是我想我可以使用線程或處理程序。 – IronHide 2012-02-13 08:29:56

+0

我不認爲有沒有其他的方式來做到這一點,而不使用線程或處理程序。 – noob 2012-02-13 12:19:57