- Forum-Beiträge: 602
30.05.2020, 15:57:19 via Website
30.05.2020 15:57:19 via Website
Hallo zusammen
Am Ende der App wird mit einem Dialog gefragt, ob die App beendet werden soll oder nicht.
package ch.robbisoft.quadrate
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import java.util.*
import android.os.Handler
import android.widget.*
import androidx.appcompat.app.AlertDialog
import kotlin.random.Random
class MainActivity : AppCompatActivity() {
// Initialisierungen
val farbeArray = intArrayOf(
R.drawable.rot,
R.drawable.gelb,
R.drawable.gruen,
R.drawable.blau,
R.drawable.cyan,
R.drawable.ocker,
R.drawable.magenta,
R.drawable.schwarz,
R.drawable.weiss)
var flBreite : Int = 0
var flHoehe : Int = 0
var punkte = 0
var meldung : AlertDialog.Builder? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
flBreite = resources.displayMetrics.widthPixels
flHoehe = resources.displayMetrics.heightPixels
meldung = AlertDialog.Builder(this)
start()
meldung!!.setTitle("Weiter machen")
meldung!!.setMessage("Nochmals Spielen?")
meldung!!.setPositiveButton("Ja") {_, _ ->
start()
}
meldung!!.setNegativeButton("Nein") {_, _ ->
finish()
}
}
private fun start(){
punkte = 0
//Zufällige Farbe beim Start
var farbeZiel = farbeArray[Random.nextInt(farbeArray.size)]
var ziel = ivZiel
ziel.setImageResource(farbeZiel)
val zeitStart = Calendar.getInstance().time.time
var spielAktiv = true
//Neues Quadrat erzeugen
val neuHandler = Handler()
val neuObjekt = object : Runnable {
override fun run() {
val ivNeu = ImageView(this@MainActivity)
val farbe = farbeArray[Random.nextInt(farbeArray.size)]
ivNeu.tag = farbe
ivNeu.setImageResource(farbe)
val lp = FrameLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
lp.leftMargin = (Random.nextDouble(0.05, 0.8) * flBreite).toInt()
lp.topMargin = (Random.nextDouble(0.05, 0.8) * flHoehe).toInt()
ivNeu.layoutParams = lp
flGesamt.addView(ivNeu)
ivNeu.setOnClickListener {
flGesamt.removeView(ivNeu)
if (spielAktiv) {
punkte += if (ivNeu.tag == farbeZiel) 1 else -1
tvPunkte.text = "Punkte: %d".format(punkte)
}
}
val loeschHandler = Handler()
val loeschObjekt = object : Runnable {
override fun run() {
flGesamt.removeView(ivNeu)
}
}
loeschHandler.postDelayed(loeschObjekt, 5000L)
neuHandler.postDelayed(this, 500L)
}
}
neuHandler.postDelayed(neuObjekt, 500L)
//Zielfarbe ändern
val zielHandler = Handler()
val zielObjekt = object : Runnable {
override fun run() {
val farbeZielAlt = farbeZiel
while (farbeZielAlt == farbeZiel)
farbeZiel = farbeArray[Random.nextInt(farbeArray.size)]
flGesamt.removeView(ziel)
ziel = ImageView(this@MainActivity)
ziel.setImageResource(farbeZiel)
val lp = FrameLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
ziel.layoutParams = lp
flGesamt.addView(ziel)
zielHandler.postDelayed(this, 5000L)
}
}
zielHandler.postDelayed(zielObjekt, 5000L)
//Zeitanzeige
val zeitHandler = Handler()
val zeitObjekt = object : Runnable {
override fun run() {
val zeitAktuell = Calendar.getInstance().time.time
val zeitDifferenz = zeitAktuell - zeitStart
val zeitAusgabe = 60 - zeitDifferenz / 1000
brZeit.progress = (180 / 60 * zeitAusgabe).toInt()
if (zeitDifferenz > 60000L) {
spielAktiv = false
neuHandler.removeCallbacks(neuObjekt)
zielHandler.removeCallbacks(zielObjekt)
meldung!!.show()
} else {
zeitHandler.postDelayed(this, 1000L)
}
}
}
zeitHandler.postDelayed(zeitObjekt, 1000L)
}
}
Wenn der Dialog angezeigt wird, kann ich irgend wo auf den Bildschirm tippen und der Dialog verschwindet und die App bleibt stehen. Was kann ich machen, dass nur Klicks vom Dialog akzeptiert werden?
Gruss Renato
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.