0

私はとの習慣を持っていlistviewますsetOnTouchListener

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch(event.getAction()) {

            case MotionEvent.ACTION_DOWN:
                  view.setBackgroundColor(Color.parseColor("#f47920"));
                  break;

            case MotionEvent.ACTION_UP:
                  view.setBackgroundColor(Color.TRANSPARENT);
                  break; 

            }

            return false;
        }

    });

そして、私は奇妙な問題に遭遇しました: ユーザーが 1 つのアイテムを保持して、リストビュー内の次のアイテムに指をドラッグすると、アプリケーションがリストから複数のアイテムを選択しようとしていると見なされるため、前のアイテムの色が保持されます。では、ユーザーが指を押したままリストを上下にドラッグした場合、どうすれば色を削除できますか?

私が達成しようとしていることを皆さんが理解してくれることを願っています。

4

3 に答える 3

3

あなたの場合の見方は何ですか?それは個別のリストアイテムですか、それともメインのリストビューですか?リストビューの場合は、ケースを処理してみてください

case MotionEvent.ACTION_MOVE : 
//Check position here, if it is out of your view, then change the color back.
于 2012-08-02T12:35:12.807 に答える
3

あなたの場合、 ACTION_MOVE ではなく ACTION_UP または ACTION_DOWN イベントが必要なので、 ACTION_MOVE を回避するには、次のようなことができます。

if(event.getAction() == MotionEvent.ACTION_DOWN)
    {
         isDown = false;            
    }
    if(event.getAction() == MotionEvent.ACTION_UP && !isDown)
    {
        // action you want to perform
    }
    if(event.getAction() == MotionEvent.ACTION_MOVE)
    {
        isDown = true;
    }

色の変更に関する限り、前のビューをグローバル変数に保存し、次のタッチに進むときに、そのグローバル ビューの色を通常の色に変更できます。

于 2012-08-02T12:49:08.513 に答える
1

クリック/タッチで ListView 項目を強調表示する場合は、OnTouchListener() をオーバーライドする代わりにセレクターを使用することをお勧めします。

色を設定したい場合は、StateListDrawable が必要です。android:listSelector 属性を使用してリストにこれを設定し、XML でドローアブルを定義できます。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>

または、ListView の項目に同じセレクターを使用できます。

于 2012-08-02T12:49:21.163 に答える