У меня есть набор RadioButton
с пользовательским стилем.Я хочу отобразить рамку вокруг кнопки, которая в данный момент отмечена.Это должно быть достаточно просто с использованием XML, но теперь я хочу, чтобы граница была анимированной.Если установлен новый переключатель, граница должна «вылететь» на новое место с причудливой анимацией:
+------+
|* btn1| o btn2
+------+
+------+
o b|n1 * |tn2
+------+
+------+
o btn1 |* btn2|
+------+
. Поэтому я решил сделать границу отдельным объектом View
,так что я могу оживить это правильно.Беда в том, чтобы отследить расположение соответствующей радиокнопки на экране.
Я пытаюсь заставить ее работать без анимации.Моя текущая попытка выглядит примерно так (показаны только соответствующие атрибуты):
<RelativeLayout
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true">
<RadioGroup
android:id="@+id/radio_group">
<RadioButton/>
<RadioButton/>
<RadioButton/>
</RadioGroup>
<View
android:id="@+id/selection_border"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
</RelativeLayout>
В OnCheckedChangeListener
из RadioGroup
я перемещаю границу выделения, устанавливая ее поле (я мог установитьположение, но это немного сложнее с RelativeLayout
):
View radioButton = findViewById(checkedId);
View selectionBorder = findViewById(R.id.selection_border);
ViewGroup radioGroup = (ViewGroup)findViewById(R.id.radio_group);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(selectionBorder.getLayoutParams());
params.leftMargin = radioGroup.getLeft() + radioButton.getLeft();
params.topMargin = radioGroup.getTop() + radioButton.getTop();
selection.setLayoutParams(params);
selection.requestLayout();
Однако при инициализации возникает проблема.Поскольку макетирование еще не выполнено, положение границы установлено неправильно.Кажется, что невозможно немедленно вызвать ретрансляцию, а также не представляется возможным получить событие после выполнения макета.
Все эти хлопоты заставляют меня поверить, чтобыть более чистым способом выполнить то, что я хочу.Какие-нибудь яркие идеи?