Bagaimana cara membuat progressbar melingkar di Android yang berputar di atasnya?

154

Saya mencoba membuat progressbar bulat. Inilah yang ingin saya capai

Ada cincin latar belakang warna abu-abu. Di atasnya, progressbar warna biru muncul yang bergerak dalam lintasan melingkar dari 0 hingga 360 dalam 60 atau berapa pun jumlah detiknya.

masukkan deskripsi gambar di sini

Ini contoh kode saya.

<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"
            />

Untuk melakukan ini, dalam "progressBarBG" yang dapat digambar, saya membuat daftar lapisan dan di dalam daftar lapisan itu saya memberikan dua item seperti yang ditunjukkan.

<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>

Sekarang, cincin abu-abu pertama dihasilkan dengan baik. Namun cincin biru dimulai dari kiri drawable dan pergi ke kanan sama seperti cara progressbar linear bekerja. Ini adalah bagaimana ia menunjukkan kemajuan 50% dengan panah warna merah menunjukkan arah.

masukkan deskripsi gambar di sini

Saya ingin memindahkan progressbar biru di jalur melingkar seperti yang diharapkan.

Saurav Srivastava
sumber
9
Tidak yakin mengapa Anda dipilih, sepertinya agak tidak adil.
BenjaminPaul
1
Saya melihat sebelum memposting pertanyaan ini. Saya menemukan beberapa jawaban tetapi tidak berhasil untuk apa yang saya coba capai. Mungkin seseorang menurunkan saya berpikir ini adalah duplikat pos.
Saurav Srivastava
1
mungkin ini dapat mengarahkan Anda ke arah yang benar github.com/grmaciel/two-level-circular-progress-bar
gmemario
1
Anda dapat menggunakan perpustakaan ini github.com/emre1512/CircleProgressBar
Zapdos
1
Maukah Anda memberi penghargaan kepada salah satu dari orang-orang yang murah hati yang mencoba menemukan solusi bagi Anda atas usaha kerasnya dengan menerima salah satu jawaban yang diberikan?
CEO tech4lifeapps

Jawaban:

324

Inilah dua solusi saya.

Jawaban singkat:

Alih-alih membuat layer-list, saya memisahkannya menjadi dua file. Satu untuk ProgressBardan satu untuk latar belakangnya.

Ini adalah ProgressDrawablefile (folder @drawable): circular_progress_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="270"
    android:toDegrees="270">
    <shape
        android:innerRadiusRatio="2.5"
        android:shape="ring"
        android:thickness="1dp"
        android:useLevel="true"><!-- this line fixes the issue for lollipop api 21 -->

        <gradient
            android:angle="0"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>

Dan ini untuk backgroundfoldernya (@drawable folder): circle_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadiusRatio="2.5"
    android:thickness="1dp"
    android:useLevel="false">

    <solid android:color="#CCC" />

</shape>

Dan pada akhirnya, di dalam tata letak yang sedang Anda kerjakan:

<ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:indeterminate="false"
        android:progressDrawable="@drawable/circular_progress_bar"
        android:background="@drawable/circle_shape"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:progress="65" />

Inilah hasilnya:

hasil 1

Jawaban panjang:

Gunakan tampilan kustom yang mewarisi android.view.View

hasil 2

Ini adalah proyek lengkap tentang github

M. Reza Nasirloo
sumber
@Pedram Bagaimana cara mengatur persentase ke bilah kemajuan? Seperti misalnya, saat ini akan 50%. Bagaimana saya harus mengatur 50% ke bilah kemajuan?
@ 20 Sen, Baca dokumentasinya, Anda harus mendapatkan referensi ke progressbar Anda dan panggil setProgressmetodenya kemudian berikan nilainya. google.com/…
M. Reza Nasirloo
Saya jadi gila mencoba menemukan nilai yang benar, puluhan topik stackoverflow merah, hanya untuk menemukan solusinya di sini .. android:fromDegrees="270" android:toDegrees="270"menyelesaikannya !! Terimakasih banyak!
Henrique de Sousa
@Skynet Ya, dan saya belum mencoba untuk memperbaikinya karena saya lebih memilih untuk membuat yang sepenuhnya disesuaikan dengan memperluas View Kelas developer.android.com/training/custom-views/index.html
M. Reza Nasirloo
1
@MimArmand Hai terima kasih, Sebenarnya itu mulai bekerja lagi di pembaruan lollipop 5.1, Dan baris itu memperbaiki masalah untuk api 21.
M. Reza Nasirloo
23

Saya telah melakukannya dengan cara mudah:

Silakan periksa tangkapan layar untuk hal yang sama.

CustomProgressBarActivity.java :

public class CustomProgressBarActivity extends AppCompatActivity {

    private TextView txtProgress;
    private ProgressBar progressBar;
    private int pStatus = 0;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_progressbar);

        txtProgress = (TextView) findViewById(R.id.txtProgress);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (pStatus <= 100) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            progressBar.setProgress(pStatus);
                            txtProgress.setText(pStatus + " %");
                        }
                    });
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    pStatus++;
                }
            }
        }).start();

    }
}

activity_custom_progressbar.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.skholingua.android.custom_progressbar_circular.MainActivity" >


    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content">

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="250dp"
            android:layout_height="250dp"
            android:layout_centerInParent="true"
            android:indeterminate="false"
            android:max="100"
            android:progress="0"
            android:progressDrawable="@drawable/custom_progressbar_drawable"
            android:secondaryProgress="0" />


        <TextView
            android:id="@+id/txtProgress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/progressBar"
            android:layout_centerInParent="true"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </RelativeLayout>



</RelativeLayout>

custom_progressbar_drawable.xml :

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="-90"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="270" >

    <shape
        android:shape="ring"
        android:useLevel="false" >
        <gradient
            android:centerY="0.5"
            android:endColor="#FA5858"
            android:startColor="#0099CC"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

</rotate>

Semoga ini bisa membantu Anda.

Hiren Patel
sumber
Hai Hiren, saya mencoba menampilkan hanya dua warna dalam tampilan. Merah dan hijau. Tapi saya melihat beberapa campuran merah dan hijau di lingkaran juga. Bagaimana saya bisa menghapusnya?
Lokesh Pandey
20

Saya telah menulis contoh terperinci pada bilah kemajuan melingkar di android di sini di blog saya demonuts.com . Anda juga dapat menyukai kode sumber lengkap dan penjelasan di sana.

Inilah cara saya membuat progressbar melingkar dengan persentase di dalam lingkaran dalam kode murni tanpa pustaka.

masukkan deskripsi gambar di sini

pertama buat file yang dapat dipanggil bernama circular.xml

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/secondaryProgress">
        <shape
            android:innerRadiusRatio="6"
            android:shape="ring"
            android:thicknessRatio="20.0"
            android:useLevel="true">


            <gradient
                android:centerColor="#999999"
                android:endColor="#999999"
                android:startColor="#999999"
                android:type="sweep" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <rotate
            android:fromDegrees="270"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="270">

            <shape
                android:innerRadiusRatio="6"
                android:shape="ring"
                android:thicknessRatio="20.0"
                android:useLevel="true">


                <rotate
                    android:fromDegrees="0"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:toDegrees="360" />

                <gradient
                    android:centerColor="#00FF00"
                    android:endColor="#00FF00"
                    android:startColor="#00FF00"
                    android:type="sweep" />

            </shape>
        </rotate>
    </item>
</layer-list>

Sekarang di activity_main.xml add Anda berikut:

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dialog"
    tools:context="com.example.parsaniahardik.progressanimation.MainActivity">

    <ProgressBar

        android:id="@+id/circularProgressbar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:indeterminate="false"
        android:max="100"
        android:progress="50"
        android:layout_centerInParent="true"
        android:progressDrawable="@drawable/circular"
        android:secondaryProgress="100"
        />

    <ImageView
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:background="@drawable/whitecircle"
        android:layout_centerInParent="true"/>

    <TextView
        android:id="@+id/tv"
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:gravity="center"
        android:text="25%"
        android:layout_centerInParent="true"
        android:textColor="@color/colorPrimaryDark"
        android:textSize="20sp" />

</RelativeLayout>

Dalam activity_main.xmlsaya telah menggunakan satu gambar lingkaran dengan latar belakang putih untuk menunjukkan latar belakang putih sekitar persentase. Ini gambarnya:

masukkan deskripsi gambar di sini

Anda dapat mengubah warna gambar ini untuk mengatur warna khusus di sekitar teks persentase.

Sekarang akhirnya tambahkan kode berikut ke MainActivity.java:

import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.DecelerateInterpolator;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    int pStatus = 0;
    private Handler handler = new Handler();
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Resources res = getResources();
        Drawable drawable = res.getDrawable(R.drawable.circular);
        final ProgressBar mProgress = (ProgressBar) findViewById(R.id.circularProgressbar);
        mProgress.setProgress(0);   // Main Progress
        mProgress.setSecondaryProgress(100); // Secondary Progress
        mProgress.setMax(100); // Maximum Progress
        mProgress.setProgressDrawable(drawable);

      /*  ObjectAnimator animation = ObjectAnimator.ofInt(mProgress, "progress", 0, 100);
        animation.setDuration(50000);
        animation.setInterpolator(new DecelerateInterpolator());
        animation.start();*/

        tv = (TextView) findViewById(R.id.tv);
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (pStatus < 100) {
                    pStatus += 1;

                    handler.post(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            mProgress.setProgress(pStatus);
                            tv.setText(pStatus + "%");

                        }
                    });
                    try {
                        // Sleep for 200 milliseconds.
                        // Just to display the progress slowly
                        Thread.sleep(8); //thread will take approx 1.5 seconds to finish
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

Jika Anda ingin membuat progressbar horizontal, ikuti tautan ini, ia memiliki banyak contoh berharga dengan kode sumber:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar

Parsania Hardik
sumber
15

Saya menyadari perpustakaan Open Source di GitHub CircularProgressBar yang melakukan persis seperti yang Anda inginkan dengan cara sesederhana mungkin:

Gif demo CircularProgressBar

PEMAKAIAN

Untuk membuat ProgressBar melingkar, tambahkan CircularProgressBar di tata letak XML Anda dan tambahkan perpustakaan CircularProgressBar di proyektor Anda atau Anda juga bisa meraihnya melalui Gradle:

compile 'com.mikhaellopez:circularprogressbar:1.0.0'

XML

<com.mikhaellopez.circularprogressbar.CircularProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:background_progressbar_color="#FFCDD2"
    app:background_progressbar_width="5dp"
    app:progressbar_color="#F44336"
    app:progressbar_width="10dp" />

Anda harus menggunakan properti berikut ini di XML Anda untuk mengubah CircularProgressBar Anda.

Properti:

  • app:progress (integer) >> default 0
  • app:progressbar_color (warna) >> default BLACK
  • app:background_progressbar_color (warna) >> GRAY standar
  • app:progressbar_width (dimensi) >> 7dp default
  • app:background_progressbar_width (dimensi) >> 3dp default

JAWA

CircularProgressBar circularProgressBar = (CircularProgressBar)findViewById(R.id.yourCircularProgressbar);
circularProgressBar.setColor(ContextCompat.getColor(this, R.color.progressBarColor));
circularProgressBar.setBackgroundColor(ContextCompat.getColor(this, R.color.backgroundProgressBarColor));
circularProgressBar.setProgressBarWidth(getResources().getDimension(R.dimen.progressBarWidth));
circularProgressBar.setBackgroundProgressBarWidth(getResources().getDimension(R.dimen.backgroundProgressBarWidth));
int animationDuration = 2500; // 2500ms = 2,5s
circularProgressBar.setProgressWithAnimation(65, animationDuration); // Default duration = 1500ms

Fork atau Unduh perpustakaan ini di sini >> https://github.com/lopspower/CircularProgressBar

lopez.mikhael
sumber
Saya Coba ini benar-benar hebat tetapi sekarang menemukan pendengar perubahan animasi. Apakah Anda tahu cara apa pun?
Md Imran Choudhury
@ lopez.mikhael Hei apakah Anda punya ide bagaimana cara menambahkan gambar di antara lingkaran?
hyperfkcb
@DeniseTan Anda cukup menggunakan FrameLayout atau RelativeLayout untuk melakukan itu.
lopez.mikhael
8

Berikut ini adalah customview sederhana untuk kemajuan lingkaran tampilan. Anda dapat memodifikasi dan mengoptimalkan lebih banyak agar sesuai untuk proyek Anda.

class CircleProgressBar @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
    private val backgroundWidth = 10f
    private val progressWidth = 20f

    private val backgroundPaint = Paint().apply {
        color = Color.LTGRAY
        style = Paint.Style.STROKE
        strokeWidth = backgroundWidth
        isAntiAlias = true
    }

    private val progressPaint = Paint().apply {
        color = Color.RED
        style = Paint.Style.STROKE
        strokeWidth = progressWidth
        isAntiAlias = true
    }

    var progress: Float = 0f
        set(value) {
            field = value
            invalidate()
        }

    private val oval = RectF()
    private var centerX: Float = 0f
    private var centerY: Float = 0f
    private var radius: Float = 0f

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        centerX = w.toFloat() / 2
        centerY = h.toFloat() / 2
        radius = w.toFloat() / 2 - progressWidth
        oval.set(centerX - radius,
                centerY - radius,
                centerX + radius,
                centerY + radius)
        super.onSizeChanged(w, h, oldw, oldh)
    }

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.drawCircle(centerX, centerY, radius, backgroundPaint)
        canvas?.drawArc(oval, 270f, 360f * progress, false, progressPaint)
    }
}

Contoh menggunakan

xml

<com.example.androidcircleprogressbar.CircleProgressBar
    android:id="@+id/circle_progress"
    android:layout_width="200dp"
    android:layout_height="200dp" />

kotlin

class MainActivity : AppCompatActivity() {
    val TOTAL_TIME = 10 * 1000L

    override fun onCreate(savedInstanceState: Bundle?) {
        ...

        timeOutRemoveTimer.start()
    }

    private var timeOutRemoveTimer = object : CountDownTimer(TOTAL_TIME, 10) {
        override fun onFinish() {
            circle_progress.progress = 1f
        }

        override fun onTick(millisUntilFinished: Long) {
            circle_progress.progress = (TOTAL_TIME - millisUntilFinished).toFloat() / TOTAL_TIME
        }
    }
}

Hasil

Phan Van Linh
sumber
5

Saya baru jadi saya tidak bisa berkomentar tetapi berpikir untuk berbagi perbaikan malas. Saya menggunakan pendekatan asli Pedram juga, dan hanya mengalami masalah Lollipop yang sama. Tapi alanv di pos lain sudah memperbaiki satu baris. Ini semacam bug atau pengawasan di API21. Secara harfiah tambahkan saja android:useLevel="true"ke progres xml lingkaran Anda. Pendekatan baru Pedram masih merupakan perbaikan yang tepat, tetapi saya hanya berpikir saya juga berbagi perbaikan yang malas.

Miao Liu
sumber
3

coba metode ini untuk membuat bitmap dan atur ke tampilan gambar.

private void circularImageBar(ImageView iv2, int i) {


    Bitmap b = Bitmap.createBitmap(300, 300,Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(b); 
    Paint paint = new Paint();

        paint.setColor(Color.parseColor("#c4c4c4"));
        paint.setStrokeWidth(10);
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawCircle(150, 150, 140, paint);

        paint.setColor(Color.parseColor("#FFDB4C"));
        paint.setStrokeWidth(10);   
        paint.setStyle(Paint.Style.FILL);
        final RectF oval = new RectF();
        paint.setStyle(Paint.Style.STROKE);
        oval.set(10,10,290,290);

        canvas.drawArc(oval, 270, ((i*360)/100), false, paint);
        paint.setStrokeWidth(0);    
        paint.setTextAlign(Align.CENTER);
        paint.setColor(Color.parseColor("#8E8E93")); 
        paint.setTextSize(140);

        canvas.drawText(""+i, 150, 150+(paint.getTextSize()/3), paint); 

        iv2.setImageBitmap(b);
}
mani
sumber
2

https://github.com/passsy/android-HoloCircularProgressBar adalah salah satu contoh perpustakaan yang melakukan ini. Seperti yang dinyatakan Tenfour04, itu harus agak khusus, karena ini tidak didukung langsung di luar kotak. Jika perpustakaan ini tidak berperilaku seperti yang Anda inginkan, Anda dapat memotongnya dan memodifikasi detailnya agar sesuai dengan keinginan Anda. Jika Anda menerapkan sesuatu yang dapat digunakan kembali oleh orang lain, Anda bahkan bisa mengirimkan permintaan tarik untuk memasukkannya kembali!

Travis
sumber
Saya melihat perpustakaan ini juga tetapi tidak ingin menggunakan perpustakaan pihak ke-3 lain hanya untuk tugas kecil ini. Namun, saya akan mencoba kedua metode yang disebutkan oleh Anda dan Tenfour04 untuk melihat mana yang berfungsi untuk saya dan membalas kembali di sini.
Saurav Srivastava
1
@SauravSrivastava: Saya juga mencari animasi serupa di aplikasi saya. Apakah Anda menemukan solusinya? Jika ya, silakan bagikan solusinya.
Basher51
@ Travis Silakan lihat pertanyaan ini - stackoverflow.com/questions/44801280/…
Kumar
2

@Pedram, solusi lama Anda juga berfungsi dengan baik di lollipop (dan lebih baik daripada yang baru karena dapat digunakan di mana-mana, termasuk dalam tampilan jarak jauh) ubah saja circular_progress_bar.xmlkode Anda ke ini:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="270"
    android:toDegrees="270">
    <shape
        android:innerRadiusRatio="2.5"
        android:shape="ring"
        android:thickness="1dp"
        android:useLevel="true"> <!-- Just add this line -->
        <gradient
            android:angle="0"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>
mim
sumber
2
Komentar luar biasa di android: useLevel = "true" !!! Anda membantu saya menyelesaikan masalah penting di Android 5! Terima kasih banyak!
DmitryKanunnikoff
2
package com.example.ankitrajpoot.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;


public class MainActivity extends Activity {

    private ProgressBar spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner=(ProgressBar)findViewById(R.id.progressBar);
        spinner.setVisibility(View.VISIBLE);
    }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loadingPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<ProgressBar
    android:id="@+id/progressBar"

    android:layout_width="48dp"
    style="?android:attr/progressBarStyleLarge"
    android:layout_height="48dp"
    android:indeterminateDrawable="@drawable/circular_progress_bar"
    android:indeterminate="true" />
</RelativeLayout>





<?xml version="1.0" encoding="utf-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="0"
    android:toDegrees="1080">
    <shape
        android:shape="ring"
        android:innerRadiusRatio="3"
        android:thicknessRatio="8"
        android:useLevel="false">

        <size
            android:width="56dip"
            android:height="56dip" />

        <gradient
            android:type="sweep"
            android:useLevel="false"
            android:startColor="@android:color/transparent"
            android:endColor="#1e9dff"
            android:angle="0"
            />

    </shape>
</rotate>
Ankit Rajpoot
sumber
Anda harus dapat menambahkan deskripsi dari solusi yang diusulkan.
il_raffa
2

Dengan Perpustakaan Komponen Bahan Anda dapat menggunakan ProgressIndicatordengan Widget.MaterialComponents.ProgressIndicator.Circular.Determinategaya.

Sesuatu seperti:

<com.google.android.material.progressindicator.ProgressIndicator
    style="@style/Widget.MaterialComponents.ProgressIndicator.Circular.Determinate"
    app:indicatorColor="@color/...."
    app:trackColor="@color/...."
    app:circularRadius="64dp"/>

Anda dapat menggunakan atribut ini:

  • circularRadius: mendefinisikan radius indikator progres melingkar
  • trackColor: warna yang digunakan untuk trek kemajuan. Jika tidak ditentukan, itu akan diatur ke indicatorColordan menerapkan android:disabledAlphadari tema.
  • indicatorColor: warna tunggal yang digunakan untuk indikator dalam mode determinate / indeterminate. Secara default menggunakan warna utama tema

masukkan deskripsi gambar di sini

Gunakan progressIndicator.setProgressCompat((int) value, true);untuk memperbarui nilai dalam indikator.

Catatan: setidaknya memerlukan versi 1.3.0-alpha01.

Gabriele Mariotti
sumber
Apa ketergantungan perpustakaan yang diperlukan?
bikram
@bikram Perpustakaan Komponen Bahan yang disediakan oleh google.
Gabriele Mariotti
Saya menambahkan implementasi 'com.google.android.material: material: 1.1.0' ke build.gradle tetapi masih ProgressIndicator tidak muncul.
bikram
@ Bikram Seperti dijelaskan dalam jawaban: setidaknya membutuhkan versi 1.3.0-alpha01.
Gabriele Mariotti
1

Perubahan

android:useLevel="false"

untuk

android:useLevel="true"

untuk sahpe kedua dengan id="@android:id/progress

semoga berhasil

ASHMIL HUSSAIN K
sumber