วิธีการสร้าง ProgressBar แบบวงกลมใน Android? [ปิด]


152

คุณมีความคิดวิธีสร้างแถบความคืบหน้าแบบวงกลมเหมือนกับแอปพลิเคชัน Google Fit หรือไม่ ชอบภาพด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่


7
ฉันเพิ่งทำอะไรแบบนี้มาไม่นาน นี่อาจเป็นจุดเริ่มต้นที่มีประโยชน์หรือไม่ github.com/daentech/CircularDemo
daentech

@daentech ยอดเยี่ยม! ขอบคุณ
Mohamed

1
ทุกคนมีคำตอบว่าขอบของส่วนการโหลดกลมเหมือนในตัวอย่างหรือไม่
Siebe

1
@Sebe คุณสามารถใช้ห้องสมุดที่ฉันกล่าวถึงในคำตอบของฉันมันสามารถปรับแต่งเพื่อรับชิ้นส่วนตามที่คุณต้องการ
WannaBeGeek

2
บางทีนี่อาจนำคุณไปในทิศทางที่ถูกต้องgithub.com/grmaciel/two-level-circular-progress-bar
gmemario

คำตอบ:


128

คุณสามารถลองใช้ห้องสมุดCircle Progress

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ:โปรดใช้ความกว้างและความสูงเดียวกันเสมอสำหรับมุมมองความคืบหน้า

DonutProgress:

 <com.github.lzyzsd.circleprogress.DonutProgress
        android:id="@+id/donut_progress"
        android:layout_marginLeft="50dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        custom:circle_progress="20"/>

CircleProgress:

  <com.github.lzyzsd.circleprogress.CircleProgress
        android:id="@+id/circle_progress"
        android:layout_marginLeft="50dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        custom:circle_progress="20"/>

ArcProgress:

<com.github.lzyzsd.circleprogress.ArcProgress
        android:id="@+id/arc_progress"
        android:background="#214193"
        android:layout_marginLeft="50dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        custom:arc_progress="55"
        custom:arc_bottom_text="MEMORY"/>

วิธีที่พวกเขากำลังแสดงค่าในความคืบหน้าฉันพยายาม setProgress ในในโมฆะการป้องกัน onProgressUpdate () {super.onProgressUpdate (); Log.d (TAG, "onProgressUpdate"); progressBar.setProgress (progressBar.getProgress () + j); Log.d (TAG, "onProgressUpdate perc:" + j); updateMemoryAndCountValues (); } แต่มันไม่ทำงาน
Erum

@Top Cat ฉันจะเพิ่มแอนิเมชั่นเช่นซูมเข้าวงกลมหรือmikinw.blogspot.com/2013/03/glow-effect.html ได้อย่างไร
user3233280

29
ใบอนุญาตที่ยิ่งใหญ่ที่สุด
radu122

19
ใบอนุญาต WTF ฮ่าฮ่า
z21

1
รับข้อผิดพลาดคำนำหน้าไม่ถูกผูกไว้
Animesh Mangla

338

มันง่ายในการสร้างด้วยตัวคุณเอง

ในเลย์เอาต์ของคุณรวมถึงสิ่งต่อไปนี้ProgressBarด้วย drawable เฉพาะ ( หมายเหตุคุณควรได้ความกว้างจากส่วนข้อมูลแทน ) ค่าสูงสุดมีความสำคัญที่นี่:

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:max="500"
    android:progress="0"
    android:progressDrawable="@drawable/circular" />

ตอนนี้สร้าง drawable ในทรัพยากรของคุณด้วยรูปร่างดังต่อไปนี้ เล่นกับรัศมี (คุณสามารถใช้innerRadiusแทนinnerRadiusRatio) และค่าความหนา

แบบวงกลม (ระดับ Lollipop พื้นฐานหรือ API <21)

   <shape
        android:innerRadiusRatio="2.3"
        android:shape="ring"
        android:thickness="3.8sp" >
        <solid android:color="@color/yourColor" />
   </shape>

แบบวงกลม (> = Lollipop หรือระดับ API> = 21)

    <shape
        android:useLevel="true"
        android:innerRadiusRatio="2.3"
        android:shape="ring"
        android:thickness="3.8sp" >
        <solid android:color="@color/yourColor" />
     </shape>

useLevelคือ"false"โดยค่าเริ่มต้นใน API ระดับ 21 (Lollipop)

เริ่มภาพเคลื่อนไหว

ถัดไปในรหัสของคุณใช้ObjectAnimatorเพื่อเคลื่อนไหวฟิลด์ความคืบหน้าProgessBarของโครงร่างของคุณ

ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", 0, 500); // see this max value coming back here, we animate towards that value
animation.setDuration(5000); // in milliseconds
animation.setInterpolator(new DecelerateInterpolator());
animation.start();

หยุดนิเมชั่น

progressBar.clearAnimation();

PS ไม่เหมือนตัวอย่างด้านบนมันให้ภาพเคลื่อนไหวที่ราบรื่น


6
มีขั้นตอนถ้าคุณทำตามนี้ 99% แน่ใจว่าคุณได้รับผล
Murtaza Khursheed Hussain

5
ทำงานเหมือนเครื่องราง หวังว่าฉันจะสามารถลงคะแนนมากกว่านี้หนึ่งครั้ง
Mushtaq Jameel

2
ใช้งานไม่ได้สำหรับฉันมุมมองที่มองไม่เห็น
JMRboosties

9
ฉันไม่รู้ว่าคุณกำลังทำอะไรอยู่มุมมองที่มองไม่เห็นไม่ใช่คำอธิบายปัญหาที่สมบูรณ์
Murtaza Khursheed Hussain

6
คำตอบของคุณดูเหมือนว่ามันจะทำงานได้อย่างยอดเยี่ยม แต่ภาพหนึ่งภาพ = 1,000 คำ .. ดังนั้นหากคุณเพิ่มผลลัพธ์ของคุณเป็นสกรีนช็อตมันอาจมีประโยชน์สำหรับผู้ใช้ในอนาคต - IMHO
Ranjith Kumar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.