In der ersten Version von * Android * gab es kein Konzept für Fragmente, und es scheint schwierig zu sein, die Fettaktivität und die terminale Rotation zu kontrollieren. In dieser Anwendung wird die Fragmentkonfiguration für jeden Bildschirm aus der Hauptaktivität ersetzt, und die Steuerung wird weggelassen, indem die Terminalrotation in der Einstellung * AndroidManifest.xml * verhindert wird. Die Möglichkeit, dass * UX * durch das Verbot der Terminalrotation beeinträchtigt wird, wurde durch die Integration eines Prozesses zum Drehen des Bildes behoben. (Ich bin später süchtig danach ...)
Um in dieser Anwendung zwei Bilder nahtlos zu kombinieren, wählen Sie das zu kombinierende Originalbild (** möchten ) auf dem ersten Bild aus und kombinieren ( möchten **) das Zielbild auf dem zweiten Bild. Wählen. (Der Status von zwei Bildern wird von * FragmentA * und * FragmentB * verwaltet.) Daher wird das Bild nach dem Berühren der Bildauswahlschaltfläche eingefügt, um ein Bild der Galerie oder einer Kamera aufzunehmen.
Nach dem Berühren der Bildauswahlschaltfläche, um ein Bild der Galerie oder der Kamera aufzunehmen, wird das Bild nicht in * ImageView * im Ziellayout des Bildschirmübergangs angezeigt, und es tritt eine Ausnahme auf.
Um das Bild in * ImageView * auf dem Bildschirmübergangsziellayout anzuzeigen, wird das in die Transaktionswarteschlange geladene Fragment sofort ausgeführt, sodass * FragmentManager * Fragmenttransaktionsverarbeitung (* commit () *) unmittelbar nach * Durch Aufrufen von executePendingTransactions () * wird * onCreateView () * aufgerufen und das Layout generiert.
Fragmenttransaktionsverarbeitung und executePendingTransactions()
// .....Abkürzung
FragmentA.newInstance().let { fragment ->
fragmentManager?.beginTransaction().let { trans ->
val fragments = fragmentManager?.fragments ?: return
for (rFragment in fragments) {
trans?.remove(rFragment)
}
trans?.replace(R.id.topContainer, fragment, FragmentA.TAG)
trans?.commit()
fragmentManager?.executePendingTransactions()
fragment.setImageView(intent) //Aufruf nach Ausführung aller Transaktionswarteschlangen
}
}
// .....Abkürzung
In dieser Anwendung werden zwei Bildbilder (kombiniertes (** wollen ) Originalbild und zusammengesetztes ( wollen **) Zielbild) ausgewählt und die Bildbilder werden nach dem Bildschirmübergang nahtlos kombiniert. Passen Sie die Zeit in der animierten Bildanzeige an, da sich die Kompositionszeit je nach Bildgröße unterscheidet.
Nach dem Blockieren, bis die nahtlose Komposition des Bilds beim * Starten * (separater Thread) von Kotlin * Collout während der Anzeige des Animationsbilds abgeschlossen ist, ist es nicht möglich, durch Fragmenttransaktionsverarbeitung zum Ergebnisbildschirm für die nahtlose Komposition überzugehen.
Es gab einen Fehler im Blockierungszeitpunkt für den Hauptthread (* UI *) im Steuerelement bis zum Übergang zum Ergebnisbildschirm für nahtlose Kompositionen, und es war nicht möglich, durch Fragmenttransaktionsverarbeitung zum Bildschirm für nahtlose Kompositionsergebnisse überzugehen.
Während das Animationsbild angezeigt wird, wird es blockiert, bis die nahtlose Komposition des Bilds beim * Starten * (separater Thread) von * Kotlin * Collout abgeschlossen ist. Anschließend wird der Übergang zum Ergebnisbildschirm für nahtlose Kompositionen in * Activity # runOnUiThread * ausgeführt.
Corroutine-Startblockverarbeitung
// .....Abkürzung
GlobalScope.launch { // Kotlin1.3 Korrespondenz
launch { //GlobalScope optional
asyncFunc(Streit).join()
}.join()
activity?.runOnUiThread {
//Fragmenttransaktionsverarbeitung
}
}
// .....Abkürzung
Funktion aussetzen
// .....Abkürzung
private fun asyncFunc(Streit): Job {
return GlobalScope.launch { // Kotlin1.3 Korrespondenz
seamlesscollage(Streit)
}
}
// .....Abkürzung
Berühren Sie in dieser Anwendung die Schaltfläche [Home] auf dem Bildschirm für nahtlose Kompositionsergebnisse, um zum Startbildschirm (oben) zu gelangen.
Nach dem Berühren der Schaltfläche [Home] auf dem Bildschirm für nahtlose Kompositionsergebnisse und dem Backstacking wird die Bildauswahl nicht initialisiert.
Da * addToBackStack () * in der Fragmenttransaktionsverarbeitung für den Backstack aufgerufen wurde, geben Sie beim Berühren der Schaltfläche [Home](Aufruf von * popBackStack () *) im Ergebnisbildschirm für nahtlose Komposition die Häufigkeit der Fragmenttransaktion und den Backstack an Der Status wie der Bildschirmübergangsstatus wurde nicht initialisiert, da die Anzahl der Einträge in nicht identisch ist.
onViewCreated()Wann[Zuhause]Tastenverarbeitung
// .....Abkürzung
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// .....Abkürzung
homeButton.setOnClickListener {
backHome()
}
}
private fun backHome() {
// .....Abkürzung
replaceTopFragment()
}
// .....Abkürzung
Fragmenttransaktionsverarbeitung (ersetzen)())
// .....Abkürzung
private fun replaceTopFragment() {
TopFragment.newInstance().let { fragment ->
fragment.arguments?.putInt(TopFragment.FLG_VIEW, 0)
fragmentManager?.beginTransaction().let { trans ->
trans?.replace(R.id.topContainer, fragment, TopFragment.TAG)
trans?.commit()
}
}
}
// .....Abkürzung
Technische Ursachen und Gegenmaßnahmen für die erste Android-App und Kotlin-Sucht 2. Verarbeitung im Zusammenhang mit der Android-Kamerafunktion 3. Verarbeitung in Bezug auf Android-Bilder
Recommended Posts