我正在使用简单的ExpandableListView,并且当一个组扩展时我需要添加动画,但它应该关闭已经扩展的任何其他组。
在添加animateLayoutChanges =“ true”之后,第一个展开的组显示了淡入淡出效果,但仅在第一个组中发生,这是我至少可以保持该淡入淡出的任何方式,以便至少可以算作一个简单的动画。
Main.xml
<ExpandableListView
android:id="@+id/labExpandList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:animationCache="true" />
list.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="10dp"
android:paddingBottom="10dp">
<TextView
android:id="@+id/labFLetter"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginBottom="10dp"
android:background="@drawable/ic_circle"
android:gravity="center"
android:text="J"
android:textColor="@color/colorPrimaryDark"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/labName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_toEndOf="@+id/labFLetter"
android:layout_toRightOf="@id/labFLetter"
android:text="Rose - Gardener - 4.6*"
android:textColor="@color/colorPrimaryDark"
android:textSize="16sp"
android:textStyle="bold" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/labName"
android:layout_marginLeft="10dp"
android:layout_marginTop="7dp"
android:layout_toRightOf="@id/labFLetter"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/recommendText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_gravity="start"
android:layout_marginRight="5dp"
android:text="@string/added_by"
android:textColor="@color/fontColor"
android:textSize="12sp" />
<TextView
android:id="@+id/lab_last_person_recommended"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_toEndOf="@id/recommendText"
android:layout_toRightOf="@id/recommendText"
android:text="John Wick"
android:textColor="@color/fontColor"
android:textSize="12sp" />
<TextView
android:id="@+id/lab_total_users_shared"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="3dp"
android:layout_toEndOf="@id/lab_last_person_recommended"
android:layout_toRightOf="@id/lab_last_person_recommended"
android:autoLink="all"
android:linksClickable="false"
android:selectAllOnFocus="false"
android:text="+6 Others"
android:textColor="@color/fontColor"
android:textSize="10sp" />
<View
android:layout_width="2dp"
android:layout_height="15dp"
android:layout_marginStart="5dp"
android:layout_marginLeft="5dp"
android:layout_toEndOf="@id/lab_total_users_shared"
android:layout_toRightOf="@id/lab_total_users_shared"
android:background="@android:color/darker_gray" />
<TextView
android:id="@+id/lab_user_occupation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginLeft="12dp"
android:layout_toRightOf="@id/lab_total_users_shared"
android:gravity="start"
android:text="Photographer"
android:textColor="@color/fontColor"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>
sub_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/animate_lab_child"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alpha="1"
android:animateLayoutChanges="true"
android:orientation="horizontal"
android:padding="10dp">
<ImageButton
android:id="@+id/labCallBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:contentDescription="Call"
android:paddingTop="10dp"
android:paddingBottom="10dp"
app:srcCompat="@drawable/phone_black" />
<ImageButton
android:id="@+id/labSmsBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:contentDescription="SMS"
android:paddingTop="10dp"
android:paddingBottom="10dp"
app:srcCompat="@drawable/chat" />
<ImageButton
android:id="@+id/labWhatsappBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:contentDescription="Whatsapp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
app:srcCompat="@drawable/ic_whatsapp" />
<ImageButton
android:id="@+id/labInfoBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:contentDescription="Info"
android:paddingTop="10dp"
android:paddingBottom="10dp"
app:srcCompat="@drawable/info" />
</LinearLayout>
可扩展列表适配器
public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<String> listDataHeader;
private HashMap<String,List<String>> listHashMap;
private Activity activity;
public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listHashMap, Activity activity) {
this.context = context;
this.listDataHeader = listDataHeader;
this.listHashMap = listHashMap;
this.activity = activity;
}
@Override
public int getGroupCount() {
return listDataHeader.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
// return listHashMap.get(listDataHeader.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return listDataHeader.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return listHashMap.get(listDataHeader.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
String contactName = (String)getGroup(groupPosition);
if (convertView == null){
LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.lab_list_item,null);
}
TextView labContactName = (TextView)convertView.findViewById(R.id.labName);
TextView labMainLetter = (TextView)convertView.findViewById(R.id.labFLetter);
TextView lablastPersonShared = (TextView)convertView.findViewById(R.id.lab_last_person_recommended);
TextView labTotalUsersShared = (TextView)convertView.findViewById(R.id.lab_total_users_shared);
labTotalUsersShared.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder sBuilder = new AlertDialog.Builder(activity);
View labShareUserView = activity.getLayoutInflater().inflate(R.layout.nof_users_recommed_modal, null);
ListView uR_List = (ListView)labShareUserView.findViewById(R.id.user_recommended);
UAdded_Adapter ur_adapter = new UAdded_Adapter();
uR_List.setAdapter(ur_adapter);
sBuilder.setView(labShareUserView);
final AlertDialog dialog = sBuilder.create();
dialog.show();
}
});
labContactName.setText(contactName);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null){
LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.lab_list_item_child,null);
}
LinearLayout animate_lab_child = (LinearLayout)convertView.findViewById(R.id.animate_lab_child);
ImageButton call = (ImageButton)convertView.findViewById(R.id.labCallBtn);
ImageButton sms = (ImageButton)convertView.findViewById(R.id.labSmsBtn);
ImageButton whatsapp = (ImageButton)convertView.findViewById(R.id.labWhatsappBtn);
ImageButton info = (ImageButton)convertView.findViewById(R.id.labInfoBtn);
info.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(activity,lab_user_details.class);
activity.startActivity(intent);
}
});
// convertView.setVisibility(View.GONE);
// animate_lab_child.setAlpha(0f);
// convertView.setVisibility(View.VISIBLE);
// Animate the content view to 100% opacity, and clear any animation
// listener set on the view.
// animate_lab_child.animate()
// .alpha(1)
// .setDuration(2000)
// .setListener(null);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
class UAdded_Adapter extends BaseAdapter{
@Override
public int getCount() {
return 6;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = activity.getLayoutInflater().inflate(R.layout.common_list_item,null);
TextView uRName = (TextView)convertView.findViewById(R.id.comName);
TextView uRFLetter = (TextView)convertView.findViewById(R.id.comFLetter);
return convertView;
}
}
}
这将为您提供帮助
AnimatedExpanadableListView:https://github.com/idunnololz/AnimatedExpandableListView/