2011-08-25 2 views
2

내 응용 프로그램을 멈추게하는 대기 명령이 끝난 직후에 10 밀리 초가 걸리므로 움직이는 것처럼 보입니다 (내 경우 공).그냥 '빠른 대기 명령을 찾으십시오.

public class PiranhaDrop extends Activity 
    { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    FrameLayout main = (FrameLayout) findViewById(R.id.main_view); 
    main.addView(new Drawing(this,0,0,0)); 
    int MyLoop=0; 
    while(MyLoop<100) 
    { 
     main.addView(new Drawing(this,MyLoop,10,10)); 
     synchronized(this){wait(10);} 
     //try{Thread.sleep(WaitTime);} catch (InterruptedException e){} 
     MyLoop=MyLoop+1; 
     main.setOnTouchListener(new View.OnTouchListener() 
     { 
      public boolean onTouch(View v, MotionEvent e) 
      { 
       float x = e.getX(); 
       float y = e.getY(); 
       FrameLayout flView = (FrameLayout) v; 
       flView.addView(new Drawing(getParent(),x,y,25)); 
       return false; 
      } 
     }); 
    } 
} 

}

당신은 루프가 내가 몇 가지를 시도했습니다 시작 직후 볼 수 있듯이합니다 (있는 waittime 나는 그것이 작동하지 않았다 제거있어하는 길이를 의미한다) - 둘 없습니다 그 중 일부는 효과가있다.

감사합니다.

try 
{ 
    Thread.sleep(10); 
} 
catch (Exception e){} 

그러나,이 UI 스레드에서 실행됩니다 참고 :

답변

1

대기하는 적절한 방법이있다. 10ms의 경우 실제 문제는 없으며 대기하는 것이 더 좋습니다 ... 그러나 오랜 기간 동안 응용 프로그램이 응답하지 않는다고 말하는 사용자에게보기 흉한 대화가 발생합니다.

+0

당신이 말했듯이 UI 스레드에서 sleep()을 호출하는 것은 나쁜 습관입니다. 그러므로 해결책으로 제시하지 마십시오. –

+0

동의하지 않습니다. 10ms의 경우 좋은 방법입니다 ... 10ms의 수면에서 얻을 수있는 것이 무엇인지 모르겠음에도 불구하고 – IncrediApp

+0

위의 IncrediApp의 코드를 사용하여 작동시키고 있다고 생각합니다. 이클립스의 에뮬레이터는별로 좋아하지 않지만 제대로 작동하는지 확인할 수 있습니다. – djmcbell

4

수동으로 수행 할 필요가 없습니다. frame animation (일련의 비트 맵 포함) 또는 tween animation (기존보기 이동/크기 조정)을 사용하십시오.

관련 문제