Как сделать Android прогрессбар с закругленной панелью загрузки? - PullRequest
1 голос
/ 01 февраля 2012

Как сделать прогрессбар с закругленным углом с правой стороны (в конце), а не только с левой стороны (в начале).В настоящее время у меня есть почти тот макет, который мне нужен, но загрузчик прогрессбара - это просто прямая вертикальная линия, я бы хотел, чтобы эта линия была закруглена.

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

По сути, вы должны сделать собственный виджет, чтобы вы могли обрезать его по своему вкусу.

Вот учебник о том, что вы ищете. ссылка!

0 голосов
/ 30 июня 2014

Нашли приятную ссылку:

Пользовательский индикатор с закругленными углами

В основном он использует собственный RelativeLayout и 9-патч подход, чтобы нарисовать округленный индикатор выполнения.

0 голосов
/ 02 февраля 2012

Итак, что я в итоге сделал в xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white"
    android:id="@+id/splash_linear">
    <FrameLayout
        android:layout_width="144dp"
        android:layout_height="13dp"
        android:layout_gravity="center"
        android:layout_marginTop="20dp">
        <View android:id="@+id/progress_horizontal"
            android:background="@drawable/progress_background"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <View android:id="@+id/progress_horizontal_bar"
            android:background="@drawable/progress_bar"
            android:layout_width="0dp"
            android:layout_height="match_parent"/>
    </FrameLayout>
</LinearLayout>

Затем в коде:

public void updateProgress(int percent) {
    int progressBarSizeDp = 144;    // the size of the progressbar
    float scale = (float) (progressBarSizeDp/100.0);
    int progressSize = (int) (percent * scale);
    if(progressSize > progressBarSizeDp) {
        progressSize = progressBarSizeDp;
    } else if(progressSize < 20) {
        progressSize = 20;
    }

    View progressBar = (View) findViewById(R.id.progress_horizontal_bar);
    int py = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, progressSize, getResources().getDisplayMetrics());

    LayoutParams params = new FrameLayout.LayoutParams(py, LayoutParams.MATCH_PARENT);
    progressBar.setLayoutParams(params);
    View splashMain = (View) findViewById(R.id.splash_linear);
    splashMain.invalidate();
}
...