У меня есть пользовательская анимированная ViewGroup (в значительной степени основанная на SlidingTab ).
В моем приложении я сократил это до одного TextView, которое ведет себя так же, как SlidingTab (слайдер на экране блокировки). Это прекрасно работает, но TextView, который скользит, определен в коде. Я хотел бы иметь весь RelativeLayout, который вместо этого скользит.
Я просмотрел всевозможные посты , пробовал разные вещи , но все еще не заставил его работать. XML-файл RelativeLayout должен быть накачан и добавлен как дочерний элемент «parent» в конструкторе Slider, но я также должен уметь выполнять методы measure () и layout (). См. Соответствующий код ниже.
открытый класс SlindingView extends ViewGroup {
private static Slider mLeftSlider;
private static int tabWidth;
/**
* Simple container class for all things pertinent to a slider.
*/
private static class Slider {
private final TextView tab;
Slider(ViewGroup parent) {
// Want to change 'tab' to a RelativeLayout in xml
tab = new TextView(parent.getContext());
tab.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.FILL_PARENT));
tab.setText("SLIDE THIS");
parent.addView(tab);
}
void layout(int l, int t, int r, int b) {
tabWidth = getTabWidth();
int tabHeight = getTabHeight();
tab.layout(0, 0, tabWidth, tabHeight);
}
public void measure() {
tab.measure(View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED), View.MeasureSpec
.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
}
public int getTabWidth() {
return tab.getMeasuredWidth();
}
public int getTabHeight() {
return tab.getMeasuredHeight();
}
}
/**
* Constructor
*/
public SlindingView(Context context, AttributeSet attrs) {
super(context, attrs);
mLeftSlider = new Slider(this);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
mLeftSlider.measure();
final int leftTabWidth = mLeftSlider.getTabWidth();
final int leftTabHeight = mLeftSlider.getTabHeight();
final int width = Math.max(widthSpecSize, leftTabWidth);
final int height = leftTabHeight;
setMeasuredDimension(width, height);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
mLeftSlider.layout(l, t, r, b);
}
}