एडिट टेक्स्ट के साथ मोशन लेआउट एनिमेशन को नष्ट कर देता है


10

मैंने एक सरल MotionLayout बनाया है जो लगभग एक समन्वयक लेआउट के समान है (एनिमेशन थोड़ा अलग हैं)।
यहाँ कुछ इस तरह है:

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

एक बार कीबोर्ड के खुलने के बाद सामग्री क्षेत्र के भीतर एक जोड़े) एडिट टेक्स्ट व्यू का उपयोग करना मोशन लाईट एनिमेशन को तोड़ देता है। एनिमेशन में अब देरी हो गई है, राज्य गलत हैं और यूआई थोड़ा जमने लगा है। इसे हल करने का कोई उपाय? बग को gif के रूप में लिंक करें

प्रयुक्त संस्करण:

com.google.android.material:material:1.2.0-alpha01
androidx.constraintlayout:constraintlayout:2.0.0-beta3

मैं एक छोटे से नमूना ऐप में भी व्यवहार को पुन: पेश कर सकता हूं

नमूना लेआउट। xml:

<androidx.constraintlayout.motion.widget.MotionLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/animation"
tools:showPaths="true">

<androidx.appcompat.widget.Toolbar
    android:id="@+id/customtoolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<com.google.android.material.textview.MaterialTextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="32dp"
    android:layout_marginBottom="48dp"
    android:text="title"
    app:layout_constraintBottom_toTopOf="@+id/formLayout"
    app:layout_constraintStart_toStartOf="parent" />

<ImageView
    android:id="@+id/image"
    android:layout_width="200dp"
    android:background="#ff00ff"
    android:layout_height="200dp"
    android:scaleType="centerCrop"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/ic_home_black_24dp" />


<androidx.core.widget.NestedScrollView
    android:id="@+id/formLayout"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/image">

    <LinearLayout
        android:id="@+id/formLayoutContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/container1"
            android:layout_width="match_parent"
            android:layout_height="200dp">

            <EditText
                android:id="@+id/container1EditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="EditText"
                android:importantForAutofill="no"
                android:inputType="text"
                android:lines="1" />
        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/container2"
            android:layout_width="match_parent"
            android:layout_height="200dp">

            <EditText
                android:id="@+id/container2EditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="EditText"
                android:importantForAutofill="no"
                android:inputType="text"
                android:lines="1" />
        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/container3"
            android:layout_width="match_parent"
            android:layout_height="200dp">

            <EditText
                android:id="@+id/container3EditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="EditText"
                android:importantForAutofill="no"
                android:inputType="text"
                android:lines="1" />
        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/container4"
            android:layout_width="match_parent"
            android:layout_height="200dp">

            <EditText
                android:id="@+id/container4EditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="EditText"
                android:importantForAutofill="no"
                android:inputType="text"
                android:lines="1" />
        </com.google.android.material.textfield.TextInputLayout>

        <com.google.android.material.button.MaterialButton
            android:id="@+id/saveButton"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:layout_marginTop="24dp"
            android:layout_marginBottom="16dp"
            android:text="Save" />
    </LinearLayout>

</androidx.core.widget.NestedScrollView>

</androidx.constraintlayout.motion.widget.MotionLayout>

animation.xml:

<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<Transition
    app:constraintSetEnd="@id/end"
    app:constraintSetStart="@id/start"
    app:motionInterpolator="easeIn">

    <OnSwipe
        app:dragDirection="dragUp"
        app:touchAnchorId="@id/formLayout"
        app:touchAnchorSide="top" />

</Transition>

<ConstraintSet android:id="@+id/start">
    <Constraint
        android:id="@id/image"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:alpha="1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Constraint
        android:id="@id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginBottom="48dp"
        android:scaleX="1.0"
        android:scaleY="1.0"
        app:layout_constraintBottom_toTopOf="@+id/formLayout"
        app:layout_constraintStart_toStartOf="parent" />
</ConstraintSet>

<ConstraintSet android:id="@+id/end">
    <Constraint
        android:id="@id/image"
        android:layout_width="200dp"
        android:layout_height="72dp"
        android:alpha="0"
        android:translationY="-10dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Constraint
        android:id="@id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="55dp"
        android:scaleX="0.85"
        android:scaleY="0.85"
        app:layout_constraintBottom_toBottomOf="@id/customtoolbar"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/customtoolbar" />
</ConstraintSet>

<KeyFrameSet>
    <KeyPosition
        app:framePosition="70"
        app:keyPositionType="pathRelative"
        app:motionTarget="@id/title"
        app:percentY="0.1" />

    <KeyAttribute
        android:alpha="0.8"
        app:framePosition="60"
        app:motionTarget="@id/image" />

</KeyFrameSet>

</MotionScene>

यह कीबोर्ड के साथ या बिना अलग स्क्रॉलिंग इवेंट के कारण है। हमारे मामले के लिए, हम सिर्फ स्क्रॉलिंग को अक्षम कर रहे हैं AppBarLayout
GensaGames

आपके प्रकट में windowSoftInputMode का मूल्य क्या है ? जब आप स्क्रॉल करते हैं, तो ऐसा लगता है कि केंद्रित EditText को वापस दृश्य में स्क्रॉल किया जा रहा है जो समझ में आता है। यह स्पष्ट नहीं है कि आप इस परिदृश्य में क्या होना चाहते हैं। आप विंडो के मान को बदलने की कोशिश कर सकते हैं। यह देखने के लिए कि क्या यह आपकी मदद करता है।
Cheticamp

क्या आपको अपने नमूने को गितुब पर रखने का मन है तो हम आपको वहां से विश्लेषण करने में मदद कर सकते हैं?
इसाई डेमियर

@IsaiDamier github.com/CaptMustache/views-widgets-samples मैंने केवल एक एडिट टेक्स्ट फ़ील्ड स्कोरलेआउट के अंत में जोड़ा है। कृपया "कॉम्प्लेक्स मोशन सैंपल" की जाँच करें और इनपुटफील्ड + कीबोर्ड + स्क्रॉलिंग के साथ
खेलें

@GensaGames यहां का दृष्टिकोण केवल ऐप लेआउट का उपयोग किए बिना केवल गति लेआउट और इसके एनिमेशन का उपयोग करना है। Googles मोशन लेआउट नमूना देखें 17 +18 github.com/CaptMustache/views-widgets-samples/tree/master/…
LuckyMalaka

जवाबों:


0

यह समस्या आम है, गति अवरोध को एक बाधा के साथ लपेटें

<ConstraintLayout >

<androidx.constraintlayout.motion.widget.MotionLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/animation"
tools:showPaths="true">


<androidx.constraintlayout.motion.widget.MotionLayout />


<ConstraintLayout />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.