여기에서 다른 질문을 확인하고 솔루션을 구현하지 못했습니다. 내 응용 프로그램은 캔버스에 그리지 않는 컨트롤을 사용합니다. 기본적으로이 내 문제를 요약 : - 컴퓨터 인Android : 컴퓨터로 제어되는 UI 변경 중에 화면 업데이트
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (ToggleButton) findViewById(R.id.btn1);
btn2 = (ToggleButton) findViewById(R.id.btn2);
btn3 = (ToggleButton) findViewById(R.id.btn2);
btn4 = (ToggleButton) findViewById(R.id.btn4);
btn5 = (ToggleButton) findViewById(R.id.btn5);
btn6 = (ToggleButton) findViewById(R.id.btn6);
btn7 = (ToggleButton) findViewById(R.id.btn7);
//blah blah blah
btn1.requestFocus();
wait(100);
btn2.requestFocus();
wait(100);
btn3.requestFocus();
wait(100);
btn3.setChecked(true);
wait(100);
btn4.requestFocus();
wait(100);
btn4.setChecked(true);
wait(100);
btn5.requestFocus();
wait(100);
btn6.requestFocus();
wait(100);
btn6.setChecked(true);
wait(100);
btn7.requestFocus();
wait(100);
//etc
}
점은 상기 버튼으로 이동 등 사용자가 무엇을하고 있는지 볼 수 있습니다를 확인하는 애니메이션. 그래서, 내 문제는 무엇입니까 내 wait() 메서드는 100ms 동안 일시 중지됩니다 또한 화면 및 포커스를 업데이트 할 것입니다? 도움이된다면 조나단에게 큰 도움이됩니다.
솔루션이 적용, 감사 앤드류 :
int timerCounterInterval = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ToggleButton btn1 = (ToggleButton) findViewById(R.id.btn1);
final ToggleButton btn2 = (ToggleButton) findViewById(R.id.btn2);
// more btns
timerCounterInterval = 0; //reset, for each pass of automation
setFocus(btn1);
setFocus(btn2);
setChecked(btn2);
// tidy up
timerCounterInterval++;
new Handler().postDelayed(new Runnable() {
public void run() {
btn2.clearFocus(); //whatever button that had the focus last
}
}, 100*(timerCounterInterval));
// etc - note any code from here will execute *before* the above timer
}
public void setFocus(final ToggleButton btn) {
timerCounterInterval++;
new Handler().postDelayed(new Runnable() {
public void run() {
btn.setFocusableInTouchMode(true); //eww, messy i know
btn.requestFocus();
btn.setFocusableInTouchMode(false);
}
}, 100*timerCounterInterval);
}
public void setChecked(final ToggleButton btn) {
timerCounterInterval++;
new Handler().postDelayed(new Runnable() {
public void run() {
btn.setChecked(true);
}
}, 100*timerCounterInterval);
}
희망이 다른 사람을 도움이!
나는 그 해결책을 발견하고 구현에 집착했다. 다음 자동 단계가 handle 객체 내에있는 것을 보았 기 때문에 "btn1.requestFocus()"와 같은 명령을 매개 변수로 전달할 수 있다고 가정합니다. 나는 자바를 처음 사용하기 때문에 문법에 익숙하지 않다. private static void wait (int ms, what_goes_here?) { 핸들러 핸들러 = new Handler(); handler.postDelayed (새의 Runnable() { 공공 무효 실행() { 내 what_goes_here 여기에 호출되는 어떻게 든!; \t} \t}, MS); \t } 간격을 채우십시오. (나쁜 레이아웃에 대해 미안합니다. 코드를 깔끔하게 삽입 할 수 없습니다.) – Jonathan
작동하지 않습니다. 나는 조금 더 똑똑해지기로 결심했으며, 이제는 "대기"를 "setFocus"로 변경했습니다. 내 기본 코드는 "btn1.requestFocus(); wait (100)"대신 "setFocus (btn1)"입니다. 내 setFocus() 메서드는 다음과 같습니다. public void setFocus (final ToggleButton btn) { 핸들러 핸들러 = 새 핸들러); handler.postDelayed (new Runnable() { public void run() {btn.requestFocus();}}, 100); } 경우에만 작동하지 않습니다. 메서드는 즉시 반환되고 사용자는 단추에서 단추로 이동하여 눈금이 점점 커지는 것을 볼 수 없습니다 (스위치를 설정하는 중복 메서드가 있음). 도와주세요? – Jonathan
예제를 사용하여 내 대답을 업데이트했지만 100이 약간 부족한 지 궁금합니다. "프레임"당 1/10 초 밖에 걸리지 않는 "애니메이션"은 볼 수있는 것보다 빠르게 발생할 수 있습니다. 내 예제에서는 초를 사용하여 명확하게 나타냅니다. –