एंड्रॉइड में एक परिपत्र प्रगति पट्टी कैसे बनाएं जो उस पर घूमता है?


154

मैं एक गोल प्रगतिबार बनाने की कोशिश कर रहा हूँ। यही मैं हासिल करना चाहता हूं

एक ग्रे कलर बैकग्राउंड रिंग है। इसके शीर्ष पर, एक नीले रंग का प्रोग्रेसबार दिखाई देता है जो 60 से 0 या 360 तक एक गोलाकार रास्ते में चलता है।

यहाँ छवि विवरण दर्ज करें

यहाँ मेरा उदाहरण कोड है।

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

ऐसा करने के लिए, ड्रॉबल "प्रगतिबार्ग" में, मैं एक लेयरलिस्ट बना रहा हूं और उस लेयर लिस्ट के अंदर मैं दो आइटम दे रहा हूं जैसा कि दिखाया गया है।

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

अब, पहली ग्रे रिंग ठीक उत्पन्न होती है। हालाँकि नीले रंग की रिंग ड्रॉएबल के बाईं ओर से शुरू होती है और दाईं ओर जाती है जैसे कि एक लीनियर प्रोग्रेसबार कैसे काम करता है। यह लाल रंग के तीर को दिशा दिखाने के साथ 50% प्रगति पर दिखाता है।

यहाँ छवि विवरण दर्ज करें

मैं अपेक्षा के अनुरूप वृत्ताकार पथ में नीले रंग की प्रगति पट्टी को स्थानांतरित करना चाहता हूं।


9
निश्चित नहीं है कि आपको क्यों वोट दिया गया है, थोड़ा अनुचित लगता है।
बेंजामिनपॉल

1
मैंने इस प्रश्न को पोस्ट करने से पहले देखा। मुझे कुछ उत्तर मिले, लेकिन मैंने जो हासिल करने की कोशिश की, उसके लिए उन्होंने काम नहीं किया। हो सकता है किसी ने मुझे यह सोचकर उकसाया हो कि यह एक डुप्लिकेट पोस्ट है।
सौरव श्रीवास्तव

1
शायद इस में सही दिशा आप इंगित कर सकते हैं github.com/grmaciel/two-level-circular-progress-bar
gmemario

1
आप इस लाइब्रेरी का उपयोग कर सकते हैं github.com/emre1512/CircleProgressBar
Zapdos

1
क्या आप उन उदार लोगों में से एक को पुरस्कृत करेंगे, जिन्होंने प्रदान किए गए उत्तरों में से एक को स्वीकार करके अपने महान प्रयासों के लिए आपके लिए एक समाधान खोजने की कोशिश की?
CEO Tech4lifeapps

जवाबों:


324

यहाँ मेरे दो समाधान हैं।

संक्षिप्त जवाब:

ए बनाने के बजाय layer-list, मैंने इसे दो फाइलों में अलग कर दिया। एक के लिए ProgressBarऔर एक अपनी पृष्ठभूमि के लिए।

यह वह जगह है ProgressDrawableफ़ाइल (@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>

और यह इसके background(@ वापस लेने योग्य फ़ोल्डर) के लिए है: 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>

और अंत में, लेआउट के अंदर जो आप काम कर रहे हैं:

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

यहाँ परिणाम है:

परिणाम 1

लंबा जवाब:

एक कस्टम दृश्य का उपयोग करें जो विरासत में मिला है android.view.View

परिणाम २

यहाँ जीथब पर पूरी परियोजना है


@Pedram मुझे प्रगति बार में प्रतिशत कैसे सेट करना चाहिए? उदाहरण के लिए, वर्तमान में यह 50% होगा। मुझे 50% प्रगति बार में कैसे सेट करना चाहिए?

@ 20 सेंट, दस्तावेज़ीकरण पढ़ें, आपको अपने प्रोग्रेसबार का संदर्भ प्राप्त करना चाहिए और इसकी setProgressविधि को कॉल करना चाहिए फिर मूल्य पास करना चाहिए। google.com/…
एम। रेज़ा नासिरेलो

मैं सही मूल्यों को खोजने की कोशिश कर पागल हो गया, स्टैकओवरफ़्लो विषयों के लाल दर्जनों, केवल यहाँ समाधान खोजने के लिए .. android:fromDegrees="270" android:toDegrees="270"इसे हल किया !! बहुत धन्यवाद!
हेनरिक डी सोसा

@Skynet हां, और मैंने इसे ठीक करने की कोशिश नहीं की है क्योंकि मैं व्यू क्लास डेवलपर
.android.com/training/custom-views/index.html

1
@MimArmand हे धन्यवाद, वास्तव में यह लॉलीपॉप 5.1 अपडेट में फिर से काम करना शुरू कर देता है, और वह लाइन एपीआई 21 के लिए समस्या को ठीक करता है।
एम। रेजा नासिरलो

23

मैंने आसान तरीके से किया है:

कृपया उसी के लिए स्क्रीन शॉट देखें।

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>

आशा है कि यह आपकी मदद करेगा।


हाय हिरेन, मैं दृश्य में केवल दो रंगों को प्रदर्शित करने की कोशिश कर रहा हूं। लाल और हरा। लेकिन मुझे सर्कल में लाल और हरे रंग का मिश्रण दिखाई देता है। मैं उसे कैसे हटा सकता हूं?
लोकेश पांडेय

20

मैंने अपने ब्लॉग demonuts.com पर एंड्रॉइड में परिपत्र प्रगति बार पर विस्तृत उदाहरण लिखा है । आप वहां फुल सोर्स कोड और स्पष्टीकरण भी दे सकते हैं।

यहां बताया गया है कि कैसे मैंने किसी भी पुस्तकालय के बिना शुद्ध कोड में सर्कल के अंदर प्रतिशत के साथ परिपत्र प्रगति पट्टी बनाई।

यहाँ छवि विवरण दर्ज करें

सबसे पहले एक ड्रा करने योग्य फ़ाइल बनाएँ 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>

अब आपके activity_main.xml ऐड में निम्नलिखित हैं:

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

में activity_main.xmlमैंने प्रतिशत के आसपास सफेद पृष्ठभूमि दिखाने के लिए सफेद पृष्ठभूमि के साथ एक परिपत्र छवि का उपयोग किया है। यहाँ छवि है:

यहाँ छवि विवरण दर्ज करें

आप प्रतिशत पाठ के आसपास कस्टम रंग सेट करने के लिए इस छवि का रंग बदल सकते हैं।

अब अंत में निम्नलिखित कोड जोड़ें 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();
    }
}

यदि आप क्षैतिज प्रगतिपट्टी बनाना चाहते हैं, तो इस लिंक का अनुसरण करें, इसके स्रोत कोड के साथ कई मूल्यवान उदाहरण हैं:
http://www.skholingua.com/android-basic/user-interface/form-widgets/progressbar


15

मुझे GitHub CircularProgressBar पर एक ओपन सोर्स लाइब्रेरी का एहसास हुआ जो आपको सबसे आसान तरीका संभव है।

Gif डेमो CircularProgressBar

उपयोग

एक परिपत्र ProgressBar जोड़ने बनाने के CircularProgressBar अपने लेआउट एक्सएमएल में और जोड़ने CircularProgressBar पुस्तकालय अपने प्रोजेक्टर में या आप भी Gradle के माध्यम से इसे प्राप्त कर सकते हैं:

compile 'com.mikhaellopez:circularprogressbar:1.0.0'

एक्सएमएल

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

अपने XML में अपने CircularProgressBar को बदलने के लिए आपको निम्न गुणों का उपयोग करना चाहिए।

गुण:

  • app:progress (पूर्णांक) >> डिफ़ॉल्ट ०
  • app:progressbar_color (रंग) >> डिफ़ॉल्ट ब्लैक
  • app:background_progressbar_color (रंग) >> डिफ़ॉल्ट ग्रे
  • app:progressbar_width (आयाम) >> डिफ़ॉल्ट 7dp
  • app:background_progressbar_width (आयाम) >> डिफ़ॉल्ट 3 डीपी

जावा

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

इस लाइब्रेरी को कांटा या डाउनलोड करें >> https://github.com/lopspower/CircularProgressBar


मेरी कोशिश है कि यह वास्तव में बहुत बढ़िया है, लेकिन अब किसी भी एनीमेशन परिवर्तन श्रोता मिले। क्या आप कोई रास्ता जानते हैं?
एमडी इमरान चौधरी

@ lopez.mikhael अरे क्या आपके पास कोई विचार है कि परिपत्र के बीच में छवि कैसे जोड़ें?
हाइपरफेकब

@DeniseTan आप बस एक FrameLayout या एक RelativeLayout का उपयोग कर सकते हैं।
lopez.mikhael

8

यहाँ प्रदर्शन सर्कल प्रगति के लिए एक सरल अनुकूलन है। आप अपनी परियोजना के लिए अधिक उपयुक्त को संशोधित और अनुकूलित कर सकते हैं।

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

उदाहरण का उपयोग कर

एक्सएमएल

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

परिणाम


5

मैं नया हूँ इसलिए मैं टिप्पणी नहीं कर सकता लेकिन आलसी को ठीक करने के लिए सोचा। मैं पेड्रम के मूल दृष्टिकोण का भी उपयोग करता हूं, और बस उसी लॉलीपॉप मुद्दे में भाग गया। परंतु एक अन्य पोस्ट में alanv एक लाइन फिक्स था। API21 में इसका कुछ प्रकार बग या ओवरसाइट है। शाब्दिक रूप से बस android:useLevel="true"अपनी सर्कल प्रगति xml में जोड़ें । पेडराम का नया दृष्टिकोण अभी भी उचित समाधान है, लेकिन मैंने अभी सोचा कि मैं आलसी को भी ठीक कर दूं।


3

बिटमैप बनाने और छवि दृश्य पर सेट करने के लिए इस विधि का प्रयास करें।

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);
}

2

https://github.com/passsy/android-HoloCircularProgressBar एक पुस्तकालय का एक उदाहरण है जो ऐसा करता है। जैसा कि Tenfour04 ने कहा है, यह कुछ हद तक कस्टम होना होगा, इसमें सीधे बॉक्स से बाहर का समर्थन नहीं किया गया है। यदि यह लाइब्रेरी आपकी इच्छानुसार व्यवहार नहीं करती है, तो आप इसे फोर्क कर सकते हैं और विवरण को संशोधित कर इसे अपनी पसंद के अनुसार काम कर सकते हैं। यदि आप किसी ऐसी चीज को लागू करते हैं जिसे दूसरे लोग पुन: उपयोग कर सकते हैं, तो आप उस विलय को वापस पाने के लिए एक पुल अनुरोध भी प्रस्तुत कर सकते हैं!


मैंने इस लाइब्रेरी को भी देखा, लेकिन केवल इस छोटे से काम के लिए एक और 3rd पार्टी लाइब्रेरी का उपयोग नहीं करना चाहता था। हालाँकि, मैं आपके और Tenfour04 द्वारा बताए गए दोनों तरीकों को आज़माने जा रहा हूं, यह देखने के लिए कि कौन सा मेरे लिए काम करता है और यहाँ वापस उत्तर देता है।
सौरव श्रीवास्तव

1
@ सौरव श्रीवास्तव: मैं भी अपने ऐप में इसी तरह के एनीमेशन की तलाश कर रहा हूं। क्या आपको इसका समाधान मिला है? यदि हाँ, तो कृपया समाधान साझा करें।
बशर 51

@Travis कृपया इस सवाल को देखें - stackoverflow.com/questions/44801280/…
कुमार

2

@Pedram, आपका पुराना समाधान लॉलीपॉप में भी वास्तव में ठीक काम करता है (और नए से बेहतर है क्योंकि यह हर जगह प्रयोग करने योग्य है, जिसमें दूरस्थ दृश्य भी शामिल हैं) बस अपना 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"> <!-- Just add this line -->
        <gradient
            android:angle="0"
            android:endColor="#007DD6"
            android:startColor="#007DD6"
            android:type="sweep"
            android:useLevel="false" />
    </shape>
</rotate>

2
Android पर उत्कृष्ट टिप्पणी: useLevel = "true" !!! आपने Android 5 पर महत्वपूर्ण मुद्दे को हल करने में मेरी मदद की! आपका बहुत बहुत धन्यवाद!
दिमित्रीकुननिकॉफ

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

आपने प्रस्तावित समाधान का विवरण जोड़ते हुए कॉशन को बोया।
il_raffa

2

सामग्री घटक लाइब्रेरी के ProgressIndicatorसाथ आप एक Widget.MaterialComponents.ProgressIndicator.Circular.Determinateशैली के साथ उपयोग कर सकते हैं ।

कुछ इस तरह:

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

आप इन विशेषताओं का उपयोग कर सकते हैं:

  • circularRadius: परिपत्र प्रगति संकेतक की त्रिज्या को परिभाषित करता है
  • trackColor: प्रगति ट्रैक के लिए उपयोग किया जाने वाला रंग। यदि परिभाषित नहीं किया गया है, तो इसे थीम से सेट किया जाएगा indicatorColorऔर लागू किया जाएगा android:disabledAlpha
  • indicatorColor: निर्धारित / अनिश्चित मोड में संकेतक के लिए उपयोग किया जाने वाला एकल रंग। डिफ़ॉल्ट रूप से यह थीम प्राथमिक रंग का उपयोग करता है

यहाँ छवि विवरण दर्ज करें

progressIndicator.setProgressCompat((int) value, true);संकेतक में मान को अपडेट करने के लिए उपयोग करें ।

नोट: इसके लिए कम से कम संस्करण की आवश्यकता है 1.3.0-alpha01


आवश्यक पुस्तकालय निर्भरता क्या है?
बिक्रम

@bikram Google द्वारा प्रदान की गई सामग्री अवयव लाइब्रेरी
गैब्रियल मारियोटी

मैंने build.gradle के लिए कार्यान्वयन 'com.google.android.material: सामग्री: 1.1.0' जोड़ा, लेकिन अभी भी ProgressIndication प्रकट नहीं होता है।
बिक्रम

@ बिक्रम जैसा कि उत्तर में बताया गया है: इसके लिए कम से कम संस्करण की आवश्यकता होती है 1.3.0-alpha01
गैब्रिएल मारियोटी

1

परिवर्तन

android:useLevel="false"

सेवा

android:useLevel="true"

के साथ दूसरे sahpe के लिए id="@android:id/progress

मुझे भरोसा है ये काम करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.