2012-02-12 12 views
2

私は、その上にカスタムビューを持つLinearLayoutを持っています。 veiwはレイアウトよりも1ポイント小さいです。 ビューが押されたりフォーカスが得られたりすると、レイアウトを背景色に変更したい。LinearLayout上にセレクタとカスタムビューを表示

私はレイアウト用のドロウアブルでセレクタを実装しています。レイアウトをクリックするとすべてが壊れてしまいます。しかし、わずか1 pxのクリック可能なスペースしかないので、レイアウト上の関連するプロパティを変更するために、その上にあるカスタムビューを必要とします。

どうすればいいですか?レイアウトがカスタマイズされていない場合、カスタムビューはエビネットをパーレントレイアウトにディスパッチできますか?

私はeasly、そのビューの上にアクセスするだけで、ビューが表示されているレイアウトに対してプログラム的に背景色を変更することができますが、バックグラウンドの色を変更してデフォルトの色に戻します。 ListViewアイテムと同様です。私はあなたがあなたのカスタムビューをクリックの上に短時間だけ背景色や画像を変更したいと思います

おかげ

答えて

1

ハンドラをuiスレッドに作成します。先頭にグローバルがあります。

ハンドラハンドラ=新しいハンドラ();返信用

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

     } 
    }, 1000); 
+0

こんにちはノアはコードのおかげで非常にきれいに見えます。私は病気がそのオプションを使用すると思う。あなたがた両方に感謝します。 – IronHide

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 is notは、メインのUIスレッドで使用するための最良のオプションです。申し訳ありませんが、これはすべて私のメインのUIスレッドにあると言及していませんでした。 – IronHide

+0

私は、スレッドとハンドラを使用し、レイアウトをハンドラに渡し、そこに1秒間背景を変更することがあります。しかし、私はスレッドやハンドラを使用しています。 – IronHide

+0

私は、スレッドやハンドラを使わないと他の方法がないと思っています。 – noob

関連する問題