Estou tentando criar uma barra de progresso arredondada. É isso que eu quero alcançar
Há um anel de fundo cinza. Além disso, é exibida uma barra de progresso de cor azul que se move em um caminho circular de 0 a 360 em 60 ou em qualquer quantidade de segundos.
Aqui está o meu código de exemplo.
<ProgressBar
android:id="@+id/ProgressBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="?android:attr/progressBarStyleLarge"
android:indeterminateDrawable="@drawable/progressBarBG"
android:progress="50"
/>
Para fazer isso, no drawable "progressBarBG", estou criando uma lista de camadas e, dentro dessa lista de camadas, estou fornecendo dois itens, como mostrado.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape
android:shape="ring"
android:innerRadius="64dp"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@color/grey" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape
android:shape="ring"
android:innerRadius="64dp"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@color/blue" />
</shape>
</clip>
</item>
Agora, o primeiro anel cinza é gerado com precisão. O anel azul, no entanto, começa da esquerda do drawable e vai para a direita, exatamente como funciona uma barra de progresso linear. É assim que ele mostra um progresso de 50%, com a seta vermelha mostrando a direção.
Quero mover a barra de progresso azul no caminho circular conforme o esperado.
fonte
Respostas:
Aqui estão minhas duas soluções.
Resposta curta:
Em vez de criar um
layer-list
, eu o separei em dois arquivos. Um porProgressBar
e outro por seu fundo.Este é o
ProgressDrawable
arquivo (pasta @drawable): circular_progress_bar.xmlE isso é para sua
background
(pasta @drawable): circle_shape.xmlE no final, dentro do layout em que você está trabalhando:
Aqui está o resultado:
Resposta longa:
Use uma exibição personalizada que herda o
android.view.View
Aqui está o projeto completo no github
fonte
setProgress
método, depois passar o valor. google.com/…android:fromDegrees="270" android:toDegrees="270"
resolvi !! Muito Obrigado!Eu fiz com maneira fácil:
Por favor, verifique a captura de tela para o mesmo.
CustomProgressBarActivity.java :
activity_custom_progressbar.xml :
custom_progressbar_drawable.xml :
Espero que isso ajude você.
fonte
Eu escrevi exemplo detalhado na barra de progresso circular no android aqui no meu blog demonuts.com . Você também pode gostar de código fonte completo e explicação lá.
Aqui está como fiz progressbar circular com porcentagem dentro do círculo em código puro, sem nenhuma biblioteca.
primeiro crie um arquivo drawable chamado
circular.xml
Agora no seu
activity_main.xml
add seguinte:Em
activity_main.xml
Eu usei uma imagem circular com fundo branco para mostrar o fundo branco em torno da porcentagem. Aqui está a imagem:Você pode alterar a cor desta imagem para definir cores personalizadas em torno do texto percentual.
Agora, finalmente, adicione o seguinte código a
MainActivity.java
:Se você quiser fazer a barra de progresso horizontal, siga este link, ele contém muitos exemplos valiosos com o código-fonte:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar
fonte
Percebi uma biblioteca Open Source no GitHub CircularProgressBar que faz exatamente o que você deseja da maneira mais simples possível:
USO
Para criar uma ProgressBar circular, adicione CircularProgressBar no XML do layout e adicione a biblioteca CircularProgressBar no seu projetor ou você também pode obtê-la através do Gradle:
XML
Você deve usar as seguintes propriedades em seu XML para alterar seu CircularProgressBar.
Propriedades:
app:progress
(inteiro) >> padrão 0app:progressbar_color
(cor) >> padrão PRETOapp:background_progressbar_color
(cor) >> padrão CINZENTOapp:progressbar_width
(dimensão) >> 7dp padrãoapp:background_progressbar_width
(dimensão) >> padrão 3dpJAVA
Garfo ou Baixe esta biblioteca aqui >> https://github.com/lopspower/CircularProgressBar
fonte
Aqui está uma visualização personalizada simples para o progresso do círculo de exibição. Você pode modificar e otimizar mais para adequado ao seu projeto.
Exemplo usando
xml
kotlin
Resultado
fonte
Eu sou novo, então não posso comentar, mas pensei em compartilhar a correção preguiçosa. Também uso a abordagem original de Pedram e acabei encontrando o mesmo problema do Lollipop. Mas já em outro post havia uma correção de uma linha. É algum tipo de bug ou supervisão na API21. Literalmente, basta adicionar
android:useLevel="true"
ao seu círculo progresso xml. A nova abordagem do Pedram ainda é a correção adequada, mas eu também pensei em compartilhar a correção preguiçosa.fonte
tente este método para criar um bitmap e defina-o como visualização de imagem.
fonte
https://github.com/passsy/android-HoloCircularProgressBar é um exemplo de uma biblioteca que faz isso. Como o Tenfour04 afirmou, terá que ser um pouco personalizado, pois isso não é suportado diretamente da caixa. Se essa biblioteca não se comportar como você deseja, você pode bifurcá-la e modificar os detalhes para fazê-la funcionar ao seu gosto. Se você implementar algo que outras pessoas possam reutilizar, você poderá enviar uma solicitação de recebimento para que a fusão seja incorporada novamente!
fonte
@Pedram, sua solução antiga também funciona bem com pirulito (e melhor que a nova, já que é utilizável em qualquer lugar, inclusive em exibições remotas), basta alterar seu
circular_progress_bar.xml
código para:fonte
fonte
Com a Biblioteca de componentes de material, você pode usá-lo
ProgressIndicator
com umWidget.MaterialComponents.ProgressIndicator.Circular.Determinate
estilo.Algo como:
Você pode usar estes atributos:
circularRadius
: define o raio do indicador de progresso circulartrackColor
: a cor usada para a trilha de progresso. Se não definido, será definido comoindicatorColor
e aplicará oandroid:disabledAlpha
do tema.indicatorColor
: a cor única usada para o indicador no modo determinado / indeterminado. Por padrão, ele usa a cor principal do temaUse
progressIndicator.setProgressCompat((int) value, true);
para atualizar o valor no indicador.Nota: requer pelo menos a versão
1.3.0-alpha01
.fonte
1.3.0-alpha01
.mudança
para
para o segundo sahpe com
id="@android:id/progress
espero que funcione
fonte