2017-12-05 8 views
0

ユーザーが指定できるミリ秒数の画像を表示する簡単なアンドロイドアプリを作ろうとしています。 以下のコードは、11秒後に最後の画像にスキップします。 あなたは一見を持って、あなたの考えを教えてください。Androidがスライドショーフレームをスキップしています

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++の代替案を公開しています。 私はディスプレイのための 'コールカーネル'機能があったと思っていました。 今後、ユーザーは写真を選択したり撮影したりできます。

私は別のアプローチを使用しています:

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を作成して解決しました。

関連する問題