4

私は基本的に、タッチされているリストアイテムの背景色をカスタマイズしたいと考えています。リスナーを書くのに疲れましたが、何らかの間違いを犯したか、これらのアクションの概念を誤解したようです。

v.setOnTouchListener( new TextView.OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.setBackgroundColor(Color.RED); 
                    break;
            case MotionEvent.ACTION_UP:
                v.setBackgroundColor(Color.WHITE);
                break;
            }

    return false;
    }
}
);

デフォルトの色はライトブルーです。リスト項目ごとに変更したい。このコードは、タッチするとアイテムの色を赤に変更しますが、その後は元に戻りません。

4

3 に答える 3

5

しかし、おそらく最良の方法は色の状態を使用することです...これを使用して、カラーフォルダーにファイル mycolors.xml を作成します。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true"
              android:color="#ff0000"/> <!-- pressed -->
        <item android:color="#ffffff"/> <!-- default -->
    </selector>

その後、次のようにビューの背景を設定します: android:background="@color/mycolors" レイアウト xml で、またはプログラムで次のように: v.setBackgroundColor(getResources().getColor(R.color.mycolors);

この場合、クリックやタッチ リスナーは必要ありません。すべてが魔法のように行われます。

詳細: http://developer.android.com/guide/topics/resources/color-list-resource.html

于 2012-10-04T22:11:02.220 に答える
1

あなたも捕まえてみましたACTION_CANCELか?

そう...

...
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
    v.setBackgroundColor(Color.WHITE);
     break;
...

ListView がスクロールを開始するため、タッチ イベントを傍受していると思います。したがって、アップアクションではなくキャンセルアクションを取得することはありません(私は推測します)。

于 2012-10-04T22:01:48.680 に答える
-1

statelistdrawable を使用します。Android 開発者サイトを含め、あらゆる場所で例を見つけることができます。

于 2012-10-04T21:56:28.553 に答える