Удаление Фоновой границы из ProgressBar - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь достичь прогресса пирога без границы

like this

без центрального круга и его прогресса .. Поэтому я попробовал несколько способов добиться этого в ProgressBar

Оба моих подхода показывают границу вокруг пирога

like this

Я просто хочу удалить границу Или я хочу, чтобы нижний круг был точного размера. 1-й подход

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="oval">
            <solid android:color="@color/grey_lightest"/>
        </shape>
    </item>
    <item>
        <shape
            android:innerRadiusRatio="100"
            android:shape="ring"
            android:thicknessRatio="2.5"
            android:useLevel="true">
            <gradient
                android:centerColor="@color/orange_above_avg"
                android:endColor="@color/orange_above_avg"
                android:startColor="@color/orange_above_avg"
                android:type="sweep"
                android:useLevel="false" />
        </shape>
    </item>

</layer-list>

2-й подход

Я создал отдельный фон и progressDrawable, но все тот же результат ..

1 Ответ

0 голосов
/ 08 января 2019

Это не точное решение вашей проблемы, но вы можете использовать customview для ее достижения.

Вот ссылка, которую я выбрал из какого-то проекта (так что не могу отдать должное)

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import in.eightfolds.soundvision.R;


public class CustomProgress extends View {

    private static final String TAG = "CustomProgress";
    private float maxWidth, maxHight;
    private PointF centerPoint;
    private float radius;
    float progressSize = 0f;
    private Path path;
    private RectF oval;
    private Paint mcirclePaint;
    private Paint mTextPaint;
    private int progress = 0;
    private Paint mBackCirclePaint;
    private  int paintStrokeWidth=40;

    public CustomProgress(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public CustomProgress(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomProgress(Context context) {
        super(context);
        init();
    }

    private void init() {
        centerPoint = new PointF();
        path = new Path();

        mcirclePaint = new Paint();

        mcirclePaint.setColor(Color.RED);

        mcirclePaint.setStrokeWidth(paintStrokeWidth);
        // paint.setDither(true);
        mcirclePaint.setAntiAlias(true);
        mcirclePaint.setStyle(Paint.Style.STROKE);
        mBackCirclePaint = new Paint();

        mBackCirclePaint.setColor(Color.DKGRAY);

        mBackCirclePaint.setStrokeWidth(paintStrokeWidth);
        // paint.setDither(true);
        mBackCirclePaint.setAntiAlias(true);
        mBackCirclePaint.setStyle(Paint.Style.STROKE);
        oval = new RectF();

        mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.SUBPIXEL_TEXT_FLAG);
        // mTextPaint.setColor(getResources().getColor(
        // android.R.color.holo_blue_dark));

        mTextPaint.setColor(Color.RED);
        mTextPaint.setStrokeWidth(1);
        mTextPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mTextPaint.setTextAlign(Paint.Align.CENTER);
        mTextPaint.setTextSize(60);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawCircle(centerPoint.x, centerPoint.y, radius,
                mBackCirclePaint);
        // mcirclePaint.setColor(Color.RED);
        canvas.drawArc(oval, -90, progressSize, false, mcirclePaint);
        // paint.setTextSize(20);
        // canvas.drawCircle(centerPoint.x, centerPoint.y, 2, mcirclePaint);

        if (progress > 0) {
            canvas.drawText(progress + "%", centerPoint.x, centerPoint.y
                    + mTextPaint.descent(), mTextPaint);

        }

    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right,
            int bottom) {

        Log.v(TAG, "" + changed);

        if (getMeasuredWidth() < getMeasuredHeight()) {
            maxWidth = getMeasuredWidth();
            maxHight = getMeasuredHeight();
            centerPoint.x = maxWidth / 2;
            centerPoint.y = maxHight / 2;

        } else {
            maxWidth = getMeasuredHeight();
            maxHight = getMeasuredWidth();
            centerPoint.x = maxHight / 2;
            centerPoint.y = maxWidth / 2;
        }
        setUp();

    }

    private void setUp() {

        if (maxWidth > maxHight) {

            radius = maxHight / 4;

        } else {

            radius = maxWidth / 4;

        }

        path.addCircle(maxWidth / 2,

        maxHight / 2, radius,

        Path.Direction.CW);

        oval.set(centerPoint.x - radius,

        centerPoint.y - radius,

        centerPoint.x + radius,

        centerPoint.y + radius);

    }

    public void upDateProgress(int progress) {


            mcirclePaint.setColor(getResources().getColor(R.color.themeColor));
            mTextPaint.setColor(getResources().getColor(R.color.themeColor));

        this.progress = progress;
        float i = 360f / 100f;
        progressSize = (float) (i * progress);
        Log.d(TAG, progress + "<----progress---->" + progressSize);
        invalidate();
    }

    public int getProgress() {
        return progress;
    }
}

Используйте это в файле макета и используйте upDateProgress для изменения прогресса. Измените ширину и цвет на свой. Если вам нужен текст, поместите текстовое представление в центр этого пользовательского вида

...