У меня есть вид recycle с двумя TextViews. Один показан, а другой невидим (ушел). Когда я нажимаю кнопку раскрытия, второе текстовое представление становится видимым с плавной анимацией. Когда я сворачиваю текстовое представление, используя метод setVisible (GONE), текстовое представление не разрушается, используя анимацию.
Я использую следующую раскладку для элемента адаптера:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:animateLayoutChanges="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fafafa"
android:orientation="horizontal"
android:paddingTop="8dp"
android:paddingBottom="8dp" >
<include
android:id="@+id/questionNumberTV"
layout="@layout/circular_step_number" />
<LinearLayout
android:layout_marginLeft="4dp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="22sp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:maxLines="2"
tools:text="Léon: The Professional sa sa saddsa das" />
<LinearLayout
android:id="@+id/expandContainer"
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:orientation="vertical">
<TextView
android:visibility="gone"
android:id="@+id/sub_item_genre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Genre: Crime, Drama, Thriller"
/>
</LinearLayout>
</LinearLayout>
<ImageView
android:layout_marginLeft="24dp"
android:id="@+id/expandOrColapse"
android:src="@drawable/ic_chevron_down_black_24dp"
android:layout_width="24dp"
android:layout_height="24dp" />
</LinearLayout>
А код адаптера Java ниже:
import android.animation.LayoutTransition;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.List;
import static android.view.View.GONE;
public class RecAdapter extends RecyclerView.Adapter<RecAdapter.RecViewHolder> {
private static final String TAG = RecAdapter.class.getName();
private List<Movie> list;
private int lastExpandedMoviePosition = -1;
public RecAdapter(List<Movie> list) {
this.list = list;
}
@Override
public RecViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_movie, parent, false);
return new RecViewHolder(view);
}
@Override
public void onBindViewHolder(RecViewHolder holder, int position) {
holder.bindBean(list.get(position));
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
public class RecViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private View questionNumberTV;
private TextView title;
private TextView genre;
private ImageView expandOrColapseIV;
private LinearLayout expandContainer;
public RecViewHolder(View itemView) {
super(itemView);
expandContainer = (LinearLayout) itemView.findViewById(R.id.expandContainer);
questionNumberTV = itemView.findViewById(R.id.questionNumberTV);
title = itemView.findViewById(R.id.item_title);
genre = itemView.findViewById(R.id.sub_item_genre);
expandOrColapseIV = itemView.findViewById(R.id.expandOrColapse);
expandOrColapseIV.setOnClickListener(this);
}
private void bindBean(Movie movie) {
boolean expanded = movie.isExpanded();
//questionNumberTV.setText((getAdapterPosition() + 1) + ".");
genre.setVisibility(expanded ? View.VISIBLE : GONE);
genre.setText("Genre: " + movie.getGenre());
if (movie.isAnswered()) {
expandContainer.getLayoutTransition().setDuration(800);
expandContainer.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
expandContainer.getLayoutTransition().setAnimateParentHierarchy(true);
if (expanded) {
expandOrColapseIV.setImageDrawable(ContextCompat.getDrawable(itemView.getContext(), R.drawable.ic_chevron_up_black_24dp));
// setHeightChangeAnimation(expandContainer);
} else {
// collapse(expandContainer);
expandOrColapseIV.setImageDrawable(ContextCompat.getDrawable(itemView.getContext(), R.drawable.ic_chevron_down_black_24dp));
}
}
title.setText(movie.getTitle());
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.expandOrColapse) {
lastExpandedMoviePosition = getAdapterPosition();
list.get(lastExpandedMoviePosition).setExpanded(!list.get(lastExpandedMoviePosition).isExpanded());
list.get(lastExpandedMoviePosition).setAnswered(true);
notifyItemChanged(lastExpandedMoviePosition);
}
}
}
}
С наилучшими пожеланиями,
Аврелиан