В нашем приложении нам нужен неопределенный индикатор выполнения, например:
Мы можем добиться этого, установив отрицательную маржу в ProgressBar, например:
<ProgressBar
android:id="@+id/progressbar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:marginTop="-7dp"
android:visibility="@{loading ? View.VISIBLE : View.GONE}" />
НО поскольку ConstraintLayout не поддерживает отрицательные поля, это будет выглядеть так:
Хорошо, отрицательная маржа была хаком. Давайте заменим его другим хаком, хорошо? Давайте представим наше пользовательское представление CustomProgressBar
, которое расширяет ProgressBar
и переопределяет его метод onDraw
, например:
@Override
protected void onDraw(Canvas canvas) {
int marginTop = dpToPx(7);
canvas.translate(0, -marginTop);
super.onDraw(canvas);
}
Но все это пахнет плохим кодом. Должно быть лучшее решение! Чтобы вы посоветовали?