Как исправить этот пользовательский стиль прогрессбар? - PullRequest
0 голосов
/ 29 января 2020

Прежде всего, я прошу прощения за плохое обращение с Engli sh, я использую Google Translate, мне нужна помощь с чем-то, что я считаю базовым c, но я не знаю предмет, мне нужно правильно добавить радиус угла в этом стиле android, но, к сожалению, я делаю это неправильно, и он выглядит следующим образом:

enter image description here

border_custom_progressbarr. xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
        </shape>
    </item>
</layer-list>

мой контент:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".pruebas"
    tools:showIn="@layout/activity_pruebas">

    <com.example.brasa.component.CustomProgressBar
        android:id="@+id/seekBar"
        android:layout_width="0dp"
        android:layout_height="30dp"
        android:max="100"
        android:progress="0"
        android:layout_marginHorizontal="15dp"
        android:layout_centerInParent="true"
        android:progressDrawable="@drawable/border_custom_progressbar"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>

</android.support.constraint.ConstraintLayout>

мой пользовательский класс ProgressBar:

package com.example.brasa.component;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.SeekBar;

import com.example.brasa.dto.ProgressItem;

import java.util.ArrayList;

public class CustomProgressBar extends android.support.v7.widget.AppCompatSeekBar {

    private ArrayList<ProgressItem> mProgresItemList;

    public CustomProgressBar(Context context){
        super(context);
        mProgresItemList = new ArrayList<ProgressItem>();
    }

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

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

    public void initData( ArrayList<ProgressItem> mProgresItemList){
        this.mProgresItemList = mProgresItemList;
    }

    @Override
    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    protected void onDraw(Canvas canvas) {
        if (mProgresItemList.size() > 0) {
            int progressBarWidth = getWidth();
            int progressBarHeight = getHeight();
            int thumboffset = getThumbOffset();
            int lastProgressX = 0;
            int progressItemWidth, progressItemRight;
            for (int i = 0; i < mProgresItemList.size(); i++) {
                ProgressItem progressItem = mProgresItemList.get(i);
                Paint progressPaint = new Paint();
                progressPaint.setColor(getResources().getColor(
                        progressItem.color));

                progressItemWidth = (int) (progressItem.progressItemPercentage
                        * progressBarWidth / 100);

                progressItemRight = lastProgressX + progressItemWidth;

                // for last item give right to progress item to the width
                if (i == mProgresItemList.size() - 1
                        && progressItemRight != progressBarWidth) {
                    progressItemRight = progressBarWidth;
                }
                Rect progressRect = new Rect();
                progressRect.set(lastProgressX, thumboffset / 2,
                        progressItemRight, progressBarHeight - thumboffset / 2);
                canvas.drawRect(progressRect, progressPaint);
                lastProgressX = progressItemRight;
            }
            super.onDraw(canvas);
        }
    }
}

и наконец мой класс ProgressItem.class:

package com.example.brasa.dto;

public class ProgressItem {
    public int color;
    public float progressItemPercentage;

    public ProgressItem(){

    }
    public ProgressItem(int color, float progressItemPercentage){
        this.color = color;
        this.progressItemPercentage = progressItemPercentage;
    }

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        this.color = color;
    }

    public float getProgressItemPercentage() {
        return progressItemPercentage;
    }

    public void setProgressItemPercentage(float progressItemPercentage) {
        this.progressItemPercentage = progressItemPercentage;
    }
}

Кто-нибудь может мне помочь, пожалуйста?

...