2015-01-24 2 views
0

5 초마다 투명에서 빨간색으로 각 listitem의 배경색을 전환하여 조작하고 싶은 목록보기가 있습니다. 이 사용자 정의 BaseAdapter 내의 getView 메서드에 대한 코드입니다Android - 목록 항목의 배경색을 투명에서 빨간색으로 주기적으로 전환하는 방법은 무엇입니까?

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder; 

    if(convertView == null){ 

     viewHolder = new ViewHolder(); 

     // store my view in view holder here 

     convertView.setTag(viewHolder); 

    } 
    else{ 

     viewHolder = (ViewHolder)convertView.getTag(); 
    } 

    // How do I manipulate this so that the background colour toggles 
    // between TRANSPARENT and RED every 5 seconds ?   
    convertView.setBackgroundColor(Color.RED); 

    return convertView; 
} 

는 내가 뭘 찾고은주기적인 실행을 제공하는 Timer를 사용하여 각 목록 요소의 배경색을 전환합니다. 그러나 이것이 정확히 어떻게 구현되어야 하는가? 아니면 같은 결과를 얻을 수있는 최적의 방법이 있습니까? docs에서

+0

- 예는 기능 자체가 매우 성가신 수 있습니다 맞다 그러나 나는 목록 항목에 적용 타이머 실험을 시도했다. 이것은 단지 실험 일뿐입니다. 나는 Timers를 사용할 생각 이었지만, 아이템이 재활용되거나 보이지 않을 때 Timer를 취소하는 방법에 대해 궁금해했습니다. – user1841702

+0

으로 바쁘다. i cud만이 가장 쉬운 와우 (wud)가 반복되는 애니메이션을 만드는 것을 말한다. 그렇지 않으면 매 5 초마다 배경을 바꾼다. 그렇지 않으면 countdowntimer를 만들고 각 아이템 하나의 오브젝트에 대해 그리고 너무나 재귀 적으로 함수를 스크롤 속도를 늦춘다. .. 애니메이션 내가 여기에 가장 적합하다고 생각합니다 .... – Ahmad

답변

0

:

new CountDownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 
     mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
    } 

    public void onFinish() { 
     mTextField.setText("done!"); 
    } 
    }.start(); 

당신은 당신이 만드는 각 행에 대한 ListView 안쪽이 CountDownTimer을 시작할 수 있습니다.

+0

고마워요. 나의 이해가 정확하다면 목록 아이템이 보이지 않을 때 타이머를 취소해야한다 (Android listviews의 재활용 현상). 나는 이것을 달성하는 가장 좋은 방법에 대해서도 궁금해합니다. – user1841702

+0

@ user1841702이 테스트를 직접 해보지는 않았지만 문제를 해결하는 방법에 대한 초기 생각이었습니다. 나는 이것을 시험해보고 무슨 일이 일어나는지를 보았다. – Marcus

+0

@ user1841702 Actully, 나는 이것이 여전히 효과가있을 것이라고 생각한다. 애플리케이션이 행을 다시 사용할 때 어떤 일이 발생할지, 새로운 'CountDownTimer'가 초기화된다는 것입니다. – Marcus

0

당신은 배경을 만들 수 있습니다 Thread 당신이 정기적으로 Timer을 작성하고 기간이 완료되면 당신이 이상 모든 ListView 항목을보고 배경을 변경할 수있는 (많은 ListItems 거대한 numbre가있을 때 메인 UI를 Thread 차단 evoid합니다) 색상 : listView.getChildAt(position).setBackgroundColor(color);

다음은 예입니다 : 데르 골렘 @

CountDownTimer remainingTimeCounter = new CountDownTimer(futureInMillis, 1000) { 

      public void onTick(long millisUntilFinished) { 

      } 

      public void onFinish() { 
       // TODO: restart counter 

       futureInMillis = newTime(); // set the same futureInMillis to make it periodic 
       this.start(); 
       listView.getChildAt(i).setBackgroundColor(color); 
      } 
     }.start();