2017-12-11 3 views
-1

私はListViewにカスタム行を持っています。Androidリストビューでシンプルなアニメーションの行を強調表示

public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    bgResourceId = R.color.white; 
    if (items.get(position).status.contentEquals("ok")) { 
     bgResourceId = R.color.green; 
    } else items.get(position).status.contentEquals("error")) { 
     bgResourceId = R.color.red; 
    } 
    row.setBackgroundResource(bgResourceId); 
    return row; 
} 

行をクリックし、新しい活動を起動する:彼らはArrayAdaptergetView()方法IND設定異なる背景色を、持っています。新しいActvityを終了した後、私たちはListViewで活動に戻り、その時点で、行の1つを強調表示する必要があります。

onResume()メソッドの中で、行をタッチまたはクリックした後ではありません。 どの行(索引)が高レベルになるのか分かります。

ちょっとしたアニメーション - 1秒間点滅した後、元の背景色に戻ることがあります。このような 何か:

enter image description here

が可能ということですか?

+2

*されている可能性* ...はい、それは – Selvin

+0

フォローある[この](https://stackoverflow.com/questions/ 5058291/highlight-listview-selected-row)、ビューにカスタムアニメーションを追加します。 – ADM

+0

ありがとう@Selvin、今、私に教えてください、どのようにそれを行うことができますか? – Dusan

答えて

0

これは、見た目にほど遠いものではありません。あなたはする必要があります

  1. タイミングが正しいことを確認してください。 onResumeはまだアイテムビューにアクセスできませんので、onWindowsFocusChangedを使用してください。あなたの活動でこれを入れて:

    Handler handler = new Handler(); 
    int blink = 4; 
    int regularBg = android.R.color.holo_orange_light; 
    int blinkingBg = android.R.color.holo_orange_dark; 
    
    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
        super.onWindowFocusChanged(hasFocus); 
        if (hasFocus) { 
         final View view = adapter.getViewByPosition(blink, listView); 
         view.setBackgroundResource(blinkingBg); 
         handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
           view.setBackgroundResource(regularBg); 
           listView.setOnScrollListener(null); 
          } 
         }, 1000); 
        } 
    } 
    
  2. アクセス項目ビューを使用すると、アダプタに追加したカスタムメソッドを介して(通常のgetViewを介して動作しません)。それはhere以上です。

    View getViewByPosition(int pos, ListView listView) { 
        final int firstListItemPosition = listView.getFirstVisiblePosition(); 
        final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; 
    
        if (pos < firstListItemPosition || pos > lastListItemPosition) { 
         return listView.getAdapter().getView(pos, null, listView); 
        } else { 
         final int childIndex = pos - firstListItemPosition; 
         return listView.getChildAt(childIndex); 
        } 
    } 
    
  3. は、あなたが強調表示したい項目は、すべての状況下で表示されていることを確認してください。これを保証できない場合は、デバイスが非常に小さいか、またはハイライトしたいアイテムが質問に表示されているリストよりもリストの下にあるため、正しい位置に最初にスクロールする必要があります。スクロールが完了した後で、項目の背景を安全に変更することができます。したがって、ListViewにはonScrollListenerを実装する必要があります。今のところ、あなたが他に教えてくれるまで、私はこれが必要でないと思います。ここで

は、それがどのように見えるかです:?

enter image description here

+0

実際、私はonResume()の正しい位置にビューをスクロールしています。 私はそれを試して、あなたに知らせるでしょう。 – Dusan

+0

私は想像したとおりではありませんが、その良い出発点です。ご協力ありがとうございました。 – Dusan

関連する問題