Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
android:paddingTop="20dp"
android:layout_marginTop="20dp"
анимируем к:
android:paddingTop="40dp"
android:layout_marginTop="0dp"
не было бы проще одновременно менять padding и margin у вьюхи URL'а?Было бы проще, но тогда на каждый шаг анимации приходилось бы по вызову onMargin+onLayout, что, на мой взгляд, не оптимально.
ps: в чем сакральный смысл наследоваться от ViewGroup, а не RelativeLayout? все эти onMeasure и тд.В данном конкретном случае исключительно в том, чтобы иметь полный контроль над тем, как дочерние вьюхи измеряются и располагаются. В принципе, я бы мог реализовать всё тоже самое с использованием FrameLayout не потеряв в производительности. Но это только потому, что разметка достаточно простая. Чем сложнее разметка, тем ощутимей выгода от использования таких вот ViewGroup. Я как раз собираюсь перевести замечательную статью по этому поводу как только смогу достучаться до автора. Пока можете самостоятельно ознакомится с оригиналом.
Было бы проще, но тогда на каждый шаг анимации приходилось бы по вызову onMargin+onLayout,
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60px"
android:orientation="horizontal">
<EditText
android:id="@+id/urlContainer"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_margin="10px" />
<Button
android:id="@+id/tabSwitcher"
android:layout_width="60px"
android:layout_height="60px"
android:layout_gravity="right" />
</LinearLayout>
Ну еще добавить изменение padding у LineraLayout. И будет совсем точь в точь)Воооот, я как раз надеялся, что вы подскажете как это сделать с использованием данного фреймворка.
Конечно, если потребуется более сложное поведение, то без customviewgroup не обойтись.Тут дело скорее не в ViewGroup, как я уже отвечал выше, в данном конкретном случае всё то же самое можно сделать с помощью обычного FrameLayout, даже практически onMeasure и onLayout переписывать не придётся. Это уже я заморочился с прицелом на более сложное расположение элементов в будущем.
public class SearchView extends LinearLayout implements View.OnFocusChangeListener {
EditText editText;
Button button;
public SearchView(Context context) {
super(context);
init(context);
}
public SearchView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public SearchView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
void init(Context c){
setOrientation(HORIZONTAL);
setGravity(Gravity.CENTER_VERTICAL);
LayoutTransition layoutTransition = new LayoutTransition();
layoutTransition.enableTransitionType(LayoutTransition.CHANGING);
setLayoutTransition(layoutTransition);
button = new Button(c);
button.setText("+");
button.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
addView(button);
editText = new EditText(c);
editText.setHint("Address");
editText.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
editText.setOnFocusChangeListener(this);
addView(editText);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
button.setVisibility(hasFocus ? GONE : VISIBLE);
}
}
Анимируем изменения размеров компонента в Android