如何为微调器设置动画,使其随选项扩展
How to animate spinner so it expands with its options
目前我有一个微调器,正如预期的那样,单击时会弹出列表,我可以在其中选择项目。我需要对其进行动画处理,以便在单击时,它的视图会向下扩展,并且会在那里显示其他选项而不会弹出任何内容。
我的搜索得出的结论是 hard/not 可以为微调器设置动画,因此我尝试制作带有边距的列表视图并在自定义动画中降低该边距,但这压缩了该列表。
我当前的旋转器代码:
MainActivity
adapter = new ProfileChoiceSpinnerAdapter(this, items, profiles);
loginBinding.profileNameSpinner.setAdapter(adapter);
public class ProfileChoiceSpinnerAdapter extends ArrayAdapter<String> {
private Context ctx;
private List<String> contentArray;
private List<ExtendedProfile> profilesWithAuthNumber;
public ProfileChoiceSpinnerAdapter(Context context, List<String> contentArray, List<ExtendedProfile> profilesWithAuthNumber) {
super(context, R.layout.profile_choice_spinner_values_layout, R.id.spinner_profile_name, contentArray);
this.ctx = context;
this.contentArray = contentArray;
this.profilesWithAuthNumber = profilesWithAuthNumber;
}
@Override
public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
convertView = getView(position, convertView, parent);
ImageView spinnerDropdownIcon = convertView.findViewById(R.id.spinner_dropdown_icon);
if(position != 0)
spinnerDropdownIcon.setVisibility(View.GONE);
return convertView;
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(ctx);
convertView = inflater.inflate(R.layout.profile_choice_spinner_values_layout, null);
}
// populating single element ...
return convertView;
}
main_activity
...
<Spinner
android:id="@+id/profile_name_spinner"
android:layout_width="@dimen/_290sdp"
android:layout_height="67dp"
android:layout_marginTop="20dp"
android:elevation="4dp"
android:background="@drawable/button_shape_white"
android:popupBackground="@drawable/button_shape_white"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
...
有什么想法或解决方案吗?如果我的描述不够清楚,请告诉我
我最终嵌套了 Listview 而不是微调器,将其设置为不可滚动,并在单击时动画改变了它的高度。当单击列表顶部的其他元素时,我将其移动到第一个位置并将高度折叠到一个元素高度
目前我有一个微调器,正如预期的那样,单击时会弹出列表,我可以在其中选择项目。我需要对其进行动画处理,以便在单击时,它的视图会向下扩展,并且会在那里显示其他选项而不会弹出任何内容。 我的搜索得出的结论是 hard/not 可以为微调器设置动画,因此我尝试制作带有边距的列表视图并在自定义动画中降低该边距,但这压缩了该列表。
我当前的旋转器代码:
MainActivity
adapter = new ProfileChoiceSpinnerAdapter(this, items, profiles);
loginBinding.profileNameSpinner.setAdapter(adapter);
public class ProfileChoiceSpinnerAdapter extends ArrayAdapter<String> {
private Context ctx;
private List<String> contentArray;
private List<ExtendedProfile> profilesWithAuthNumber;
public ProfileChoiceSpinnerAdapter(Context context, List<String> contentArray, List<ExtendedProfile> profilesWithAuthNumber) {
super(context, R.layout.profile_choice_spinner_values_layout, R.id.spinner_profile_name, contentArray);
this.ctx = context;
this.contentArray = contentArray;
this.profilesWithAuthNumber = profilesWithAuthNumber;
}
@Override
public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
convertView = getView(position, convertView, parent);
ImageView spinnerDropdownIcon = convertView.findViewById(R.id.spinner_dropdown_icon);
if(position != 0)
spinnerDropdownIcon.setVisibility(View.GONE);
return convertView;
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(ctx);
convertView = inflater.inflate(R.layout.profile_choice_spinner_values_layout, null);
}
// populating single element ...
return convertView;
}
main_activity
...
<Spinner
android:id="@+id/profile_name_spinner"
android:layout_width="@dimen/_290sdp"
android:layout_height="67dp"
android:layout_marginTop="20dp"
android:elevation="4dp"
android:background="@drawable/button_shape_white"
android:popupBackground="@drawable/button_shape_white"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
...
有什么想法或解决方案吗?如果我的描述不够清楚,请告诉我
我最终嵌套了 Listview 而不是微调器,将其设置为不可滚动,并在单击时动画改变了它的高度。当单击列表顶部的其他元素时,我将其移动到第一个位置并将高度折叠到一个元素高度