2016-01-22 3 views

ответ

0

Это может быть реализовано путем отсечения холста, содержащего изображение под углом (путем рисования дуги).

И закрепите это изображение, рисуя дугу.

Вот как вы можете это сделать.

//Convert the progress in range of 0 to 100 to angle in range of 0 180. Easy math. 
float angle = (progress * 180)/100; 
mClippingPath.reset(); 
//Define a rectangle containing the image 
RectF oval = new RectF(mPivotX, mPivotY, mPivotX + mBitmap.getWidth(), mPivotY + mBitmap.getHeight()); 
//Move the current position to center of rect 
mClippingPath.moveTo(oval.centerX(), oval.centerY()); 
//Draw an arc from center to given angle 
mClippingPath.addArc(oval, 180, angle); 
//Draw a line from end of arc to center 
mClippingPath.lineTo(oval.centerX(), oval.centerY()); 

как только вы получите путь, вы можете использовать clipPath function подрезать полотно в этом пути.

canvas.clipPath(mClippingPath); 

Посмотрите на Semi Circle Progress Bar для более легкой и полезной информации.


Обратите внимание, что функция clipPath не работает, если аппаратное ускорение включено. Вы можете отключить аппаратное ускорение только для этого вида.

//Turn off hardware accleration 
    semiCircleProgressBarView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Как и когда прогресс изменения вы можете установить ProgressBar с помощью вызова функции,

semiCircleProgressBarView.setClipping(progress); 

 Смежные вопросы

  • Нет связанных вопросов^_^