简体 中文 版 说明 >>>

Scene este o biblioteca usoara de navigatie si compozitie ui bazata pe vizualizare.

  1. Navigare simpla si convenabila si gestionarea stivei, accepta stive multiple
  2. Management si distributie imbunatatite a ciclului de viata
  3. Mai usor de implementat animatie complexa cu scene taiate
  4. Sprijina modificarea proprietatilor si recuperarea activitatii si ferestrei
  5. Sprijina valoarea de returnare intre scene, solicita asistenta si acorda permisiuni in scena
  6. Suporta salvarea si recuperarea starii scenei

Descarcati demonstratia

Aplicatii care utilizeaza Scene

Introducere

Scena este conceputa pentru a inlocui utilizarea Activitatii si a fragmentelor in navigare si segmentarea paginilor.

Principalele probleme ale activitatii:

  1. Gestionarea stivei a Activitatii este slaba, Intent si LaunchMode sunt confuze, chiar daca diferite hack-uri inca nu pot evita complet probleme precum ecranul negru
  2. Performanta activitatii este slaba, timpul mediu de pornire al unei activitati goale depaseste 60 ms (pe Samsung S9)
  3. Deoarece activitatea este fortata sa sustina recuperarea statelor, aceasta provoaca unele probleme:
    • Animatia de tranzitie are capacitate limitata, dificil de implementat animatii interactive complexe.
    • Animatia cu elemente partajate este practic indisponibila si exista unele blocari nerezolvate in Android Framework.
    • De fiecare data cand incepeti o noua activitate, onSaveInstance () al activitatii anterioare trebuie executat complet mai intai, ceea ce va pierde multa performanta.
  4. Activitatea se bazeaza pe fisierul Manifest pentru a provoca dificultati de injectie, ceea ce duce si la faptul ca dinamica activitatii necesita o varietate de hacks

Principalele probleme ale Fragmentului:

  1. Exista multe blocari pe care oficialul Google nu le poate rezolva mult timp. Chiar daca nu utilizati Fragment, acesta poate declansa totusi un blocaj in OnBackPressed () din AppCompatActivity.
  2. Operatia de adaugare / eliminare / ascundere / afisare nu este executata imediat. Cu fragmentele cuib chiar daca utilizati commitNow (), actualizarea starii fragmentelor secundare nu poate fi garantata.
  3. Suportul animatiei este slab, ordinea axei Z nu poate fi garantata la comutare
  4. Gestionarea navigarii este slaba, nu exista o gestionare avansata a stivei, cu exceptia push de baza si pop
  5. Ciclul de viata al Fragmentului in pachetele native Fragment si Support-v4 nu este exact acelasi

Cadrul Scenei incearca sa rezolve aceste probleme ale Activitatii si Fragmentului mentionate mai sus.

Ofera un API simplu, fiabil si extensibil pentru o solutie usoara de navigare si segmentare a paginilor

In acelasi timp, oferim o serie de solutii de migrare pentru a ajuta dezvoltatorii sa migreze treptat de la activitate si fragment la scena.

Incepe

Adaugati la build.gradle:

implementare ‘com.bytedance.scene: scene: $ latest_version’ implementare ‘com.bytedance.scene: scene-ui: $ latest_version’ implementare ‘com.bytedance.scene: scene-shared-element-animation: $ latest_version’ implementation ‘com .bytedance.scene: scene-ktx: $ latest_version ‘

Scena are 2 subclase: NavigationScene si GroupScene:

  1. NavigationScene accepta navigarea
  2. GroupScene accepta compozitia ui

Pentru o utilizare simpla, lasati doar activitatea dvs. sa mosteneasca de la SceneActivity:

class MainActivity: SceneActivity () {override fun getHomeSceneClass (): Class <out Scene> {return MainScene :: class.java} override fun supportRestore (): Boolean {return false}}

Un exemplu simplu de scena:

class MainScene: AppCompatScene () {private lateinit var mButton: Buton override fun onCreateContentView (inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View? {val frameLayout = FrameLayout (requireSceneContext ()) mButton = Buton (requireSceneContext ()) mButton.text = “Faceti clic pe” frameLayout.addView (mButton, FrameLayout.LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT), ViewGroup) } override fun onActivityCreated (savedInstanceState: Bundle?) {super.onActivityCreated (savedInstanceState) setTitle (“Main”) toolbar? .navigationIcon = null mButton.setOnClickListener {navigationScene? .push (SecondScene ())}} Clasa SecondScat ) {private val mId: Int by lazy {View.generateViewId ()} override fun onCreateContentView (inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View? {val frameLayout = FrameLayout (requireSceneContext ()) frameLayout.id = mId return frameLayout} override fun onActivityCreated (savedInstanceState: Bundle?) {super.

mamadas retro videos incesto online
porno español abuelas jovencitasxxx
videos de follar tetas en la playa
la engaña para follar madres españolas follando con hijos
peliculas porno de incesto en español cincuentonas
paja en el coche viejas tetonas
porno gay guarro lesbianas incesto
pilladas meando tias cachondas
follando en el trastero pilladas meando
mamada a dos bocas porno gay trios
abuelas tragando leche chicas corriendose
pilladas pajeandose porno amater español
porno gay trios lesbianas preciosas
realincest maduras masturbandose
sexo español gratis folladas extremas
colegialas anal coños maduros
descargar peliculas porno completas come pollas
maduras en la playa mujeres normales desnudas
vecina mirona pirno
incesto abuelas follando en casa

onActivityCreated (savedInstanceState) setTitle (“Second”) add (mId, TAG) “)}} clasa ChildScene: Scene () {override fun onCreateView (inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View {val view = View (requireSceneContext ()) view.setBackgroundColor (Color.GREEN) return view }}

Migrarea la scena

O noua aplicatie poate utiliza Scene prin mostenirea directa a SceneActivity.

Dar daca activitatea dvs. existenta nu este convenabila pentru a schimba relatia de mostenire, puteti utiliza direct SceneDelegate pentru a gestiona scenele, consultati codul SceneActivity.

Luati ca exemplu planul de migrare a paginii de pornire XiguaVideo:

In primul rand, declara un aspect in XML al activitatii de acasa pentru stocarea Scene: scene_container

<? xml version = “1.0” encoding = “utf-8”?> <merge xmlns: android = “http://schemas.android.com/apk/res/android” android: layout_width = “match_parent” android: layout_height = “match_parent”> <…> <…> <! – Mai sus este aspectul existent al Activitatii -> <FrameLayout android: id = “@ + id / scene_container” android: layout_width = “match_parent “android: layout_height =” match_parent “/> </merge>

Apoi creati o scena transparenta ca scena radacina:

public static class EmptyHolderScene extends Scene {@NonNull @Override public View onCreateView (LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {return new View (getActivity ()); } @Override public void onViewCreated (View view, @Nullable Bundle savedInstanceState) {super.onViewCreated (view, savedInstanceState); getView (). setBackgroundColor (Color.TRANSPARENT); } @Override public void onActivityCreated (@Nullable Bundle savedInstanceState) {super.onActivityCreated (savedInstanceState); Activitate ArticleMainActivity = (ArticleMainActivity) requireActivity (); activity.createSceneLifecycleCallbacksToDispatchLifecycle (getNavigationScene ()); }}

Legati aceasta scena transparenta de R.id.scene_container:

mSceneActivityDelegate = NavigationSceneUtility.setupWithActivity (aceasta, R.id.scene_container, nula, noua NavigationSceneOptions (). setDrawWindowBackground (false) .setFixSceneWindowBackgroundEnabled (true) .setSceneBackground (R.color.material). );

In esenta, exista o coperta transparenta a scenei pe activitate, dar nu este vizibila vizual.

Apoi furnizati metoda Push in Activitate:

public void push (@NonNull Class <? extends Scene> clazz, @Nullable Bundle argument, @Nullable PushOptions pushOptions) {if (mSceneActivityDelegate! = null) {mSceneActivityDelegate.getNavigationScene (). push (clazz, argument, pushOptions); }}

Aceasta finalizeaza migrarea de baza, puteti deschide o noua pagina Scena direct in aceasta activitate.

Probleme

Dialog

O fereastra de dialog normala este independenta si se afla in fata ferestrei activitatii, deci daca incercati sa impingeti o scena intr-un dialog de deschidere, aceasta va face ca scena sa apara in spatele ei. Puteti inchide caseta de dialog cand faceti clic sau puteti utiliza Scene pentru a implementa dialogul in locul unui dialog de sistem.

SurfaceView si TextureView

Cand apare scena, animatia va fi executata dupa executarea ciclului de viata a scenei. Cu toate acestea, daca exista un SurfaceView sau un TextureView, acest proces va face ca SurfaceView / TextureView sa devina negru.

Puteti obtine si reatribui Surface inainte de incheierea animatiei pentru a evita problemele de pe TextureView si pentru a captura ultima bitmap si setati la ImageView pentru a evita problemele de pe SurfaceView.

Legat de bara de stare

Nu exista un API oficial al ecranului de notch inainte de Android P si fiecare furnizor are propria sa implementare.

Daca incercati sa ascundeti bara de stare cu WindowFlag sau View’s UiVisibility, aceasta va declansa reproiectarea intregii activitati.

Acest lucru poate provoca schimbarea aspectului scenei din interior, iar comportamentele pot sa nu fie asa cum era de asteptat in unele cazuri.

Licenta

Copyright (c) 2019 ByteDance Inc licentiat sub licenta Apache, versiunea 2.0 („Licenta”); nu puteti utiliza acest fisier decat in ​​conformitate cu licenta. Puteti obtine o copie a Licentei la http://www.apache.org/licenses/LICENSE-2.0 Cu exceptia cazului in care este cerut de legea aplicabila sau este convenit in scris, software-ul distribuit in baza Licentei este distribuit pe o BAZA “CA ESTE”, FARA GARANTII SAU CONDITII DE ORICE TIP, fie expres, fie implicit. Consultati licenta pentru limbajul specific care reglementeaza permisiunile si limitarile din licenta.