2014-09-02 2 views
4

Я хотел бы знать, если есть возможность нарисовать круг, который половину его наполненную, что-то, как показано ниже:Android нарисовать полукруг с границами

enter image description here

, если это возможно, позже я хотел бы заполнить этот cirlce или сделать его пустым только с левыми границами, что хорошо, но все равно добавить анимацию к нему? как от пустого круга до половины заполненного или полностью заполненного круга, чтобы произойти с переходом?

заранее спасибо

+0

Да, возможно, я занят, поэтому не могу написать вам полный ответ. Но вам нужно будет создать пользовательский «Drawable» @Override метод «draw (Canvas)», вызвать методы на объекте «canvas», чтобы сделать круг и вызвать 'invalidateSelf()' всякий раз, когда вы хотите повторно рисовать (из-за анимации). Удачи. – Budius

+0

Вы можете проверить [этот ответ] (http://stackoverflow.com/questions/24858531/filling-a-circle-gradually-from-bottom-to-top-android/24866667#24866667). Вы должны будете настроить математику для поворота круга на 90 °. Кроме того, если это только для API 19 и выше, это еще проще, используя методы 'Path # op()'. –

+1

@Budius спасибо помощнику, указывая мне в правильном направлении будет достаточно, я буду смотреть на это. –

ответ

0

пытаются присвоить индивидуальный фон для него, как:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > 

    <gradient 
     android:angle="0" 
     android:endColor="#FF000000" 
     android:startColor="#00000000" /> 

</shape> 
0

Ответ на пример кода:

проверка Также этот ответ: https://stackoverflow.com/a/22568222/1052261

public class CircleView extends View { 

    public CircleView(final Context context, final AttributeSet attrs) { 
     super(context, attrs); 
     _paint = new Paint(); 
     _paint.setColor(context.getResources().getColor(R.color.colorPrimary)); 
     _paint.setAntiAlias(true); 

     _paintCenter = new Paint(); 

     _paintCenter.setColor(Color.BLUE); 
     _paintCenter.setAntiAlias(true); 

     _timeRingSize = Utils.convertDpToPixel(context, 10); 
    } 

    @Override 
    protected void onDraw(final Canvas canvas) { 
     final float height = canvas.getHeight(); 
     final float width = canvas.getWidth(); 

     float radious = width > height ? height * 0.5F : width * 0.5F; 

     final float centerX = canvas.getWidth() * 0.5F; 
     final float centerY = canvas.getHeight() * 0.5F; 

     canvas.drawCircle(centerX, centerY, radious, _paint); 

     RectF rectF = new RectF(); 
     rectF.set(centerX - radious, centerY - radious, centerX + radious, centerY + radious); 

     canvas.drawArc(rectF, 0, 90, true, _paintCenter); 
    } 

    private final float _timeRingSize; 
    private Paint _paintCenter; 
    private Paint _paint; 
} 

Выход:

enter image description here

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