2017-12-05 1 views
0

나는 사용자가 지정할 수있는 밀리 초 동안 이미지를 표시 할 간단한 안드로이드 앱을 만들려고합니다. 아래 코드는 11 초 후 마지막 이미지로 건너 뜁니다. 당신은 내 모습을보고 당신이 생각하는 것을 말해 줄 수 있습니까?안드로이드가 슬라이드 쇼 프레임을 건너 뛰는 경우

public void buttonPressed(View view){ 
     ImageView canvas = findViewById(R.id.canvas); 
      delay(1000); 
      canvas.setImageResource(R.drawable.c1); 
     delay(1000); 
      canvas.setImageResource(R.drawable.c2); 
     delay(1000); 
      canvas.setImageResource(R.drawable.c3); 
     delay(1000); 
      canvas.setImageResource(R.drawable.c4); 
     delay(1000); 
      canvas.setImageResource(R.drawable.c5); 
     delay(5000); 
      canvas.setImageResource(R.drawable.c6); 
     delay(2000); 
} 
    void delay(long ms){ 
     long init = SystemClock.uptimeMillis(); 
     while(SystemClock.uptimeMillis() != init+ms); 
    } 

나는 C/C++ 대안을 공개하고 있습니다. 디스플레이를위한 '콜 커널 (call kernel)'기능이 있기를 바랬습니다. 앞으로 사용자가 사진을 선택하거나 가져갈 수있게하려고합니다. 나는 다른 접근 방식을 사용하고

는 :

public class MainActivity extends AppCompatActivity { 
     private ImageView canvas; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      canvas = findViewById(R.id.canvas); 
     } 


     public void buttonPressed(View view){ 

      new STask().execute("start"); 

     } 
     public class STask extends AsyncTask<String,Void,Void>{ 

      @Override 
      protected Void doInBackground(String... strings) { 
       long start = SystemClock.uptimeMillis(); 
       if(SystemClock.uptimeMillis() == start + 1000){ 
        canvas.setImageResource(R.drawable.c2); 
        canvas.invalidate(); 
       }else if(SystemClock.uptimeMillis() == start + 3000){ 
        canvas.setImageResource(R.drawable.c3); 
        canvas.invalidate(); 
       }else if(SystemClock.uptimeMillis() == start + 4500){ 
        canvas.setImageResource(R.drawable.c4); 
        canvas.invalidate(); 
       }else if(SystemClock.uptimeMillis() == start + 8000){ 
        canvas.setImageResource(R.drawable.c5); 
        canvas.invalidate(); 
       }else if(SystemClock.uptimeMillis() == start + 10000){ 
        canvas.setImageResource(R.drawable.c6); 
        canvas.invalidate(); 

       } 
       return null; 
      } 


     } 

    } 

나는 지속적으로 백그라운드에서 실행하기 위해 AsyncTask를 필요합니다.

+0

프레임을 건너 뛰고 있습니까? 아니면 너무 오래 지속되는 프레임이 있습니까? – mewa

+0

프레임을 건너 뜁니다 –

+0

'<'를'! ='로 바꾸면 도움이됩니까? – mewa

답변

1

지연을 별도의 스레드에 넣고 슬라이드를 변경하고 UI 스레드에서 실행되도록 Runnable을 작성하여 해결했습니다.

관련 문제