Батарея круг, как виджет батареи возрождается
Я пытаюсь нарисовать круг на основе процента заряда батареи. У меня есть следующий код:
Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types
Bitmap bmp = Bitmap.createBitmap(200, 200, conf);
Paint mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.BLUE);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(5);
circle = new Path();
circle.addCircle(100, 100, level, Direction.CW);
Canvas canvas = new Canvas(bmp);
canvas.drawPath(circle, mPaint);
Я пытаюсь получить похожий на Battery Widget Reborn, где его круговой путь нарисован на основе процента, не мог бы кто-нибудь помочь.
Правка:
Ниже приведен снимок того, что я пытаюсь сделать

2 ответов:
Вы должны быть в состоянии сделать это с
Path.addArc(). Вам просто нужно определить границы заключающего прямоугольника, начальный угол и сколько градусов нужно развернуть.Что-то вроде:
RectF box = new RectF(0,0,bmp.getWidth(),bmp.getHeight()); float sweep = 360 * level * 0.01f; circle.addArc(box, 0, sweep);
Вы можете использовать этот класс в качестве полного рабочего примера. Вы также можете добавить текст в представление, но это выходит за рамки вопроса...
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.view.View; public class DrawView extends View { Paint mPaint = new Paint(); public DrawView(Context context) { super(context); } @Override public void onDraw(Canvas canvas) { Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG | Paint.ANTI_ALIAS_FLAG); mPaint.setDither(true); mPaint.setColor(Color.GRAY); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(1); int size = 200; int radius = 190; int delta = size - radius; int arcSize = (size - (delta / 2)) * 2; int percent = 42; //Thin circle canvas.drawCircle(size, size, radius, mPaint); //Arc mPaint.setColor(Color.parseColor("#33b5e5")); mPaint.setStrokeWidth(15); RectF box = new RectF(delta,delta,arcSize,arcSize); float sweep = 360 * percent * 0.01f; canvas.drawArc(box, 0, sweep, false, mPaint); } }
Comments