Я пытаюсь показать большую версию изображения при нажатии на 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
}
}
Я знаю, что упустил что-то маленькое, но прочитал несколько статей и просто не могу определить, что я делаю неправильно.