Ich versuche, eine einfache Android-App, die einige Bilder für eine benutzerdefinierbare Anzahl von Millisekunden zeigen wird. Der folgende Code springt nach 11 Sekunden zum letzten Bild. können Sie einen Blick und sagen Sie mir, was Sie denken.Android Skipping Diashow Frames
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);
}
Ich bin offen für C/C++ - Alternativen. Ich wünschte, es gäbe eine "Call Kernel" -Funktion für das Display. In Zukunft möchte ich, dass der Benutzer die Bilder auswählen oder aufnehmen kann.
ich einen anderen Ansatz bin mit:
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;
}
}
}
Ich brauche die AsyncTask ständig im Hintergrund laufen zu lassen.
Überspringt es Frames oder sind einige Frames zu lang? – mewa
Es werden Frames übersprungen –
Hilft es, wenn Sie '! =' Für '<'? – mewa