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を継続的にバックグラウンドで実行する必要があります。
フレームをスキップしていますか、あまりにも長いフレームが残っていますか? – mewa
フレームをスキップしています –
'<'に '!='を入れ替えると役立ちますか? – mewa