2015-08-06 40 views
9

Để vẽ vòng tròn và biểu đồ hình tròn trong Android, chúng tôi có thể sử dụng khung làm việc AChartEngine Android như được hiển thị here.Vẽ hình tròn được điền theo chiều ngang trong Android

Tuy nhiên, làm thế nào chúng ta có thể vẽ các vòng tròn được điền một phần theo chiều ngang (hoặc theo chiều dọc) trong Android? Tôi có nghĩa là các vòng tròn được lấp đầy, ví dụ, từ dưới lên trên theo tỷ lệ được chỉ định trong mã Java.

Đây là một bản xem trước của những gì chúng ta cần:

Preview

+3

Tôi đã một ví dụ về một trong những cách để làm điều đó trong [câu trả lời của tôi ở đây] (http://stackoverflow.com/questions/24858531/filling-a-circle-gradually-from-bottom-to-top-android). Trên thực tế, có hai cách, nếu bạn kiểm tra lịch sử sửa đổi cho bài đăng đầu tiên. Câu trả lời ban đầu của tôi, tuy nhiên, chỉ hoạt động trong API 19 trở lên. –

+1

Câu trả lời của bạn tốt hơn và đơn giản hơn (một lớp tiện ích). Cảm ơn bạn @MikeM. – Omar

Trả lời

7

Hãy thử lib này Circle Progress.
Đây là một mẫu từ tác giả lib của:

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

circle

+0

Tôi tìm thấy một số khó khăn để thực hiện và chạy thành công lib/mã này. Lib này mặc dù chi tiết và cung cấp nhiều cách của các hình thức tiến bộ trong Android. Cảm ơn bạn @Minhtdh. – Omar

0

Mở rộng Drawable và để cho phương pháp draw của bạn trông như thế này:

public void draw(Canvas c) { 
    float size = ...; // The size of your circle 
    Paint color = new Paint(); 
    color.setColor(...); // Color of your circle 
    c.drawCircle(size/2, size/2, size/2, color); 
    Path p = new Path(); 
    float ratio = ...; // How many of the circle you want to have filled 
    float offset = size * (float) Math.sqrt(1-((double) (0.5-ratio) * 2)*((double) (0.5-ratio) * 2))/2; 
    float angle = (float) Math.asin((double) (0.5-ratio) * 2); 
    p.addArc(offset, size * (1-percent), size - offset, size, angle, Math.PI - angle); 
    p.close(); 
    c.drawPath(p, color); 
} 
Các vấn đề liên quan