2014-02-11 4 views
0

사용자 응답을 기반으로 상대 레이아웃에 textviews를 동적으로 추가하여 컬러 격자 패턴을 만듭니다. 일반적으로 텍스트 뷰 태그의 값에 따라 배경색이 다른 5000 개 이상의 텍스트 뷰를 포함 할 수 있습니다.루프 속도 향상 방법

나는 모든 textviews를 반복하여 같은 색상을 가지고 나머지는 회색으로 표시하는이 방법을 사용합니다. 이것은 500 개의 텍스트 뷰가 있다고 말할 때 잘 작동하지만 숫자가 더 높을 때 5000이라고 말하면 완료하는데 13 초가 걸립니다.

if (code.equals("all")) { 
    for (int i = 0; i < textViewIDs.size(); i++) { 
     TextView tv = (TextView) findViewById(textViewIDs.get(i)); 
     if (!tv.getTag().toString().equals("header")) { 
      tv.setBackgroundColor(Color.parseColor("#" + tv.getTag().toString())); 
     } 
    } 
} else { 
    for (int i = 0; i < textViewIDs.size(); i++) { 
     TextView tv = (TextView) findViewById(textViewIDs.get(i)); 
     if (!tv.getTag().equals(code)) { 
      if (!tv.getTag().toString().equals("header")) { 
       tv.setBackgroundColor(Color.LTGRAY); 
      } 
     }else{ 
      tv.setBackgroundColor(Color.parseColor("#" + tv.getTag().toString())); 
     } 
    } 
} 

textViewIDs는 모든 textviewID를 포함하는 배열입니다.

속도를 높이려면 어떤 조치를 취할 수 있습니까?

업데이트 : 그 위젯 수가 이상적이지는 않지만 더 나은 해결책을 찾지 못했습니다. 각 격자 셀뿐만 아니라이 경우 각 texview는 서로 다른 색상을 가지고 있기 때문에 텍스트를 추가 할 수 있도록 셀의 onclick 이벤트를 관리 할 수 ​​있어야합니다. 그것은 textviews에 대한 추론이었다. textviews를 사용하기 전에 모든 요소를 ​​그렸습니다.하지만 각 셀에 onclick 이벤트를 추가하는 방법을 찾지 못했습니다.

내가 뭘 하려는지, 내가 잘못한 길로 빠져 나간 사람을 도우려는 개념을 자세히 설명하는 것이 좋습니다.

이것은 스티치 차트로 이미지를 변환하는 훨씬 더 큰 응용 프로그램의 일부입니다. 사용자 입력에 따라 색칠 된 셀의 격자가 그려지며 각 셀은 원본 이미지에서 가장 지배적 인 색에서 계산 된 단색입니다. 격자가 화면보다 커지므로 내보기가 가로 및 세로보기에 배치되어 팬 및 확대/축소가 가능합니다. (이것은 모두 잘 작동합니다). 그리드 셀을 클릭 할 수 있어야 배경 색상을 켜거나 끌 수 있으며 스티치 (셀)을 완료로 표시하는 단일 텍스트 "X"문자를 추가 할 수 있습니다. (이것은 텍스트 뷰 (셀)이다>가 충분한 정보가 500)

희망 ...

+2

배열에 메서드가 없습니다. – Blackbelt

+0

잘 배열, 그 배열 목록 ...하지만 난 당신이 실제로 루프에 대한 속도를 높일 수 있다고 생각하지 않는다 ...하지만 배열은 정렬 된 경우 더 빨리 도움이 되길 원합니다. :) –

+2

또는 어쩌면 ListView를 사용하려고 시도하십시오 –

답변

4

findViewById()은 압력 포인트가 될 것으로 보인다. ID 목록을 유지하는 대신에 View 자체에 대한 참조 목록을 보관합니다 (누출 가능성이있는 경우 WeakReference).

+0

감사합니다. 어떤 종류의 목록이 될까요? ArrayList? – Mark

+0

ArrayList가 확실히 작업을 수행합니다! – nyx

+0

아이디어 (nyx)로 코드를 업데이트 한 후 13 초가 아닌 즉시 업데이트됩니다. 누가 그런 생각을하게 될지 생각했습니다. Artoo 사전에 루프 한계 아이디어를 계산했습니다. 고마워요 – Mark

0

많은 TextView의 저가형 기기가로드 할 수 없도록하는 것은 나쁜 습관입니다.

TextView에 여러 개의 스타일로 하나를 만들어보십시오. 배경색에 HTML 태그를 사용할 수 있습니다.

더 나은 것은 단지 ListView을 만드는 것입니다. 그러면보기가 재생됩니다.

1

1 - 대한 (INT I = 0; 나는 < textViewIDs.size(); 내가 ++) {... 그것은 최적화 아니에요 : 변수에 제한을 미리 계산주기 시작하기 전에 :
INT 렌을 = textViewIDs.size(); 및주기에 len을 사용하십시오.

2 - i - ("역 루프"라고 부름)은 i ++보다 빠릅니다.멋진 루프 비교를 참조하십시오. here

+0

그것은 의미가 있습니다, 그것은 11 초로 2 초 감소했습니다. – Mark

+0

더 많은 항목, 더 많은 속도 증가, 물론. 그것은 큰 숫자입니다. –