Ограничение Android не вступает в силу - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь показать большую версию изображения при нажатии на Glide SliderLayout и создал два файла макета, как показано ниже;один для стандартного представления, а другой для увеличенного представления Slider.

Я реализовал пример, как описано в Как точно ConstraintSet работает с ConstraintLayouts в Android? , но при вызове Slider тогдамакет не изменяется вообще, хотя код выполняется просто отлично.

Activity_product_details.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/cLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".activity.ProductDetailsActivity">

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nestview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.constraint.ConstraintLayout
            android:id="@+id/cLayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.CardView
                android:id="@+id/imageview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="@dimen/_8sdp"
                app:layout_constraintTop_toBottomOf="@+id/mapview"
                card_view:cardElevation="@dimen/_2sdp"
                card_view:cardUseCompatPadding="true">

                <android.support.constraint.ConstraintLayout
                    android:id="@+id/imageconstraint"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">

                    <com.glide.slider.library.SliderLayout
                        android:id="@+id/productimage"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/_180sdp"
                        android:scaleType="fitCenter"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent" />

                </android.support.constraint.ConstraintLayout>
            </android.support.v7.widget.CardView>
    </android.support.v4.widget.NestedScrollView>
</android.support.constraint.ConstraintLayout>

Activity_product_details_image_zoom.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/cLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".activity.ProductDetailsActivity">

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nestview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.constraint.ConstraintLayout
            android:id="@+id/cLayout2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.CardView
                android:id="@+id/imageview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardCornerRadius="@dimen/_8sdp"
                app:layout_constraintTop_toBottomOf="@+id/mapview"
                card_view:cardElevation="@dimen/_2sdp"
                card_view:cardUseCompatPadding="true">

                <android.support.constraint.ConstraintLayout
                    android:id="@+id/imageconstraint"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">

                    <com.glide.slider.library.SliderLayout
                        android:id="@+id/productimage"
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/_400sdp"
                        android:scaleType="fitCenter"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent" />

                </android.support.constraint.ConstraintLayout>
            </android.support.v7.widget.CardView>
    </android.support.v4.widget.NestedScrollView>
</android.support.constraint.ConstraintLayout>

Единственная разница междуДо сих пор существует два макета, это то, что android: layout_height для Slider был увеличен с 180sdp до 400sdp.

Код Java выглядит следующим образом:

    ...
    ConstraintSet cSetOne = new ConstraintSet();
    ConstraintSet cSetTwo = new ConstraintSet();
    ConstraintLayout mConstraintLayout; // cache the ConstraintLayout
    boolean mOld = true;
    ...

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        cSetTwo.clone(this, R.layout.activity_product_details_image_zoom); // get constraints from layout
        setContentView(R.layout.activity_product_details);
        mConstraintLayout = findViewById(R.id.cLayout);
        cSetOne.clone(mConstraintLayout); // get constraints from ConstraintSet
    }

Я установил Sliderсобытие щелчка при загрузке данных.

    ...
    sliderView
       .image(listUrl.get(i))
       .setRequestOption(requestOptions)
       .setBackgroundColor(R.color.colorWhite)
       .setProgressBarVisible(true)
       .setOnSliderClickListener(ProductDetailsActivity.this);
    ...

    @Override
    public void onSliderClick(BaseSliderView slider) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            AutoTransition transition = new AutoTransition();
            transition.setDuration(1000);
            TransitionManager.beginDelayedTransition(mConstraintLayout, transition);
        }

        if (mOld = !mOld) {
            cSetOne.applyTo(mConstraintLayout); // set new constraints
        } else {
            cSetTwo.applyTo(mConstraintLayout); // set new constraints
        }
    }

Я знаю, что упустил что-то маленькое, но прочитал несколько статей и просто не могу определить, что я делаю неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...