Dans la version initiale d'Android *, il n'y avait pas de concept de fragment, et il semble qu'il était difficile de contrôler l'activité graisseuse et la rotation terminale. Dans cette application, la configuration de fragment pour chaque écran est remplacée par l'activité principale et le contrôle est omis en interdisant la rotation du terminal dans le paramètre * AndroidManifest.xml *. La possibilité que * UX * soit altérée en interdisant la rotation du terminal a été résolue en incorporant un processus de rotation de l'image. (J'en suis accro plus tard ...)
Dans cette application, afin de combiner de manière transparente deux images, sélectionnez l'image d'origine à combiner (** voulez ) sur la première image, et combinez ( voulez **) l'image de destination sur la deuxième image. Choisir. (L'état de deux images est géré par * FragmentA * et * FragmentB *) Par conséquent, après avoir touché le bouton de sélection d'image pour prendre une photo de la galerie ou d'un appareil photo, l'image est collée après la transition d'écran.
Après avoir touché le bouton de sélection d'image pour prendre une photo de la galerie ou de l'appareil photo, l'image n'est pas affichée dans * ImageView * sur la disposition de destination de transition d'écran et une exception se produit.
Afin d'afficher l'image dans * ImageView * sur la disposition de destination de transition d'écran, le fragment chargé dans la file d'attente de transaction est exécuté immédiatement, donc * FragmentManager * traitement de transaction de fragment (* commit () *) immédiatement après * En appelant executePendingTransactions () *, * onCreateView () * sera appelé et la mise en page sera générée.
Fragmenter le traitement et l'exécution des transactions()
// .....Abréviation
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) //Appel après l'exécution de toutes les files d'attente de transactions
}
}
// .....Abréviation
Dans cette application, deux images d'image (image originale combinée (** souhaite ) et image de destination composite ( souhaite **)) sont sélectionnées, et les images d'image sont combinées de manière transparente après la transition d'écran. Puisqu'il y a une différence dans la durée de composition en fonction de la taille de l'image, ajustez l'heure dans l'affichage de l'image animée.
Après le blocage jusqu'à ce que la composition transparente de l'image de l'image soit terminée au * lancement * (fil séparé) de Kotlin * collout lors de l'affichage de l'image d'animation, il n'est pas possible de passer à l'écran de résultat de composition transparente par le traitement de transaction de fragment.
Une erreur s'est produite dans la synchronisation du blocage pour le thread principal (* UI *) dans le contrôle jusqu'à la transition vers l'écran de résultat de composition transparente, et il n'a pas été possible de passer à l'écran de résultat de composition transparente par le traitement de transaction de fragment.
Pendant que l'image d'animation est affichée, elle sera bloquée jusqu'à ce que la composition transparente de l'image d'image soit terminée au * lancement * (fil séparé) de * Kotlin * collout, puis la transition vers l'écran de résultat de la composition transparente sera effectuée dans * Activity # runOnUiThread *.
Traitement des blocs de lancement Corroutine
// .....Abréviation
GlobalScope.launch { // Kotlin1.3 correspondance
launch { //GlobalScope en option
asyncFunc(argument).join()
}.join()
activity?.runOnUiThread {
//Traitement des transactions par fragments
}
}
// .....Abréviation
Fonction de suspension
// .....Abréviation
private fun asyncFunc(argument): Job {
return GlobalScope.launch { // Kotlin1.3 correspondance
seamlesscollage(argument)
}
}
// .....Abréviation
Dans cette application, appuyez sur le bouton [Accueil] sur l'écran des résultats de composition homogène pour passer à l'écran d'accueil (supérieur).
Après avoir touché le bouton [Accueil] sur l'écran de résultat de la composition homogène et la superposition arrière, la sélection d'image n'est pas initialisée.
Puisque * addToBackStack () * a été appelé dans le traitement de transaction de fragment pour la pile arrière, si vous touchez le bouton [Accueil](appelez * popBackStack () *) sur l'écran de résultat de composition transparente, le nombre de fois où la transaction de fragment a été utilisée et la pile arrière Le statut tel que le statut de transition d'écran n'a pas été initialisé car le nombre d'entrées n'est pas le même.
onViewCreated()Quand[domicile]Traitement des boutons
// .....Abréviation
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// .....Abréviation
homeButton.setOnClickListener {
backHome()
}
}
private fun backHome() {
// .....Abréviation
replaceTopFragment()
}
// .....Abréviation
Traitement des transactions par fragments (remplacer)())
// .....Abréviation
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()
}
}
}
// .....Abréviation
Causes techniques et contre-mesures pour la première application Android et la dépendance à Kotlin 2. Traitement lié à la fonction de la caméra Android 3. Traitement lié aux images Android
Recommended Posts