KISA ÖZETİAndroid değil senkron
döngü ve gecikme Ben bir etkinlik oyunu var. Kullanıcı görüntüleri tıklama:
Kullanıcı 5 saniye tıkla ve doğru olanını seçmek zorunda. 5 saniye sonra, doğru görüntü çekimi, dikkat çekmek için farklı şekilde gösterilecek ve 5 saniye sonra kullanıcı bir sonraki seviyeyi görecektir.
kullanıcı 5 saniye beklemeden tıklanabilir, bu yüzden tıklandığında hemen bir sonraki seviyeye gitmelidir.
Görüntüleme ve görüntü görünümlerini dinamik olarak oluşturuyorum. Resim görüntülemeleri yerel veritabanı sqlitesinden bayt olarak geliyor.
Benim yöntem, oncreate yönteminin içinde oluşturuyor. Ve ben ya da döngü boyunca kullanıyorum. Her yineleme bir oyun seviyesidir. Her seviye farklı görüntü görüntülemelerine ve farklı görüntü görüntülemelerine sahiptir.
5 + 5 saniye geciktirmek için, işleyicileri, iş parçacıklarını ve geri sayım hatalarını kullanmalıydım. Her biri sorunlara neden oldu.
İşleyicileri kullanırken, kullanıcı 5 saniyeden önce tıkladığında, geçerli oturumu sonlandıramadım.
Bunun doğru yol olup olmadığını bilmiyorum.
UZUN AÇIKLAMA VE KODLARI
zamanlayıcı:
nCreate() {
for (int i = 0; i < 2; i++) {
handler.postDelayed(new Runnable() {
public void run() {
imageAnswer.setImageBitmap(bmp);
imageAnswer.setId(R.id.imgAnswer);
//adding image to screen
finalRLayout.removeAllViews();
finalRLayout.addView(imageAnswer, rLayParams);
//starting timer, if no answer in 5 seconds, run again timer
startTimer();
//clicklisterner
imageAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//if clicks true, cancel timer and go to next iteration of for loop
if (view == findViewById(R.id.imgAnswer)) {
Log.d(TAG, "clicked");
//PUT IN CODE HERE TO GET NEXT IMAGE
cancelTimer();
} else { //if not true, run again timer for last chance
Log.d(TAG, "nonclick");
cancelTimer();
startTimer();
}
}
});
}
}, 2000 * i);
} //for end
} //oncreate end
//start timer function
void startTimer() {
cTimer = new CountDownTimer(5000, 1000) {
public void onTick(long millisUntilFinished) {
Log.d(TAG, "ontick");
}
public void onFinish() {
Log.d(TAG, "timer onfinish");
}
};
cTimer.start();
}
//cancel timer
void cancelTimer() {
Log.d(TAG, "canceltimer");
if (cTimer != null)
cTimer.cancel();
}
3 farklı iplik işlemleri ancak işe yaramadı
Aşağıda benim kodlarını görebilirsiniz. Bunlardan biri ekranın siyah ekranına girdi. diğer ikisi de döngüleri engellemedi. Oyununuzu uygulanması daha profesyonel bir şey kullanmalıdır Oyun geliştirme için
runnable version
for (int i = 0; i< 20 ; i++) {
Log.d(TAG, "for i2="+ i);
final int finalI = i;
final RelativeLayout finalRLayout = rLayout;
final Runnable r=new Runnable() {
@Override
public void run() {
Log.d(TAG, "for finali2="+ finalI);
TrainingObject trainingObject = new TrainingObject();
trainingObject = trainingObjectList.get(finalI);
objectCount = 2;
//test icin
Log.d(TAG,"testicin trainingobjectid: "+trainingObject.getTrainingobjectID());
object = dbHandler.getObjectObject(trainingObject.getTrainingobjectAnswer());
RelativeLayout.LayoutParams rLayParams = new RelativeLayout.LayoutParams(140,140);
rLayParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
rLayParams.addRule(RelativeLayout.CENTER_IN_PARENT);
imgBytes = object.getObjectImageBlob();
bmp = BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length);
imageAnswer.setImageBitmap(bmp);
imageAnswer.setTag(trainingObject.getTrainingobjectAnswer());
imageAnswer.setId(R.id.imgAnswer);
finalRLayout.removeAllViews();
finalRLayout.addView(imageAnswer,rLayParams);
}
};
Log.d(TAG, "3000i2 sonrasi");
handler.postDelayed(r, 6000 * i);
imageAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (view == findViewById(R.id.imgAnswer)) {
Log.d(TAG, "clicked");handler.removeCallbacks(r); handler.postDelayed(r, 0);
//PUT IN CODE HERE TO GET NEXT IMAGE
}
else{
Log.d(TAG, "nonclick");
handler.removeCallbacks(r); handler.postDelayed(r, 6000);
}
}
});
}//for end
Bu soruyu aşağıdan okuyor muyuz? – fiipi
Bu bir soru değil. – Simas
[AlarmManager] 'ı kullanmayı denediniz mi (https://developer.android.com/reference/android/app/AlarmManager.html) –