2015-07-29 2 views
6

Я использую этот код, чтобы нарисовать половину в моем приложении:как рисовать полукруг в андроиде

<?xml version="1.0" encoding="utf-8" ?> 
<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <item 
     android:left="35dp" 
     android:top="40dp" 
     android:bottom="40dp" 
     android:right="0dp"> 
     <shape 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="oval" android:innerRadius="30dp" android:thickness="0dp"> 
      <solid android:color="@color/transparent"/> 
      <stroke android:width="3dp" android:color="@color/White"/> 

     </shape> 
    </item> 
</layer-list> 

выход:

enter image description here

, но мне нужно что-то, как показано ниже:

enter image description here

как рисовать это?

ответ

9

Я хотел бы предложить, чтобы сделать это с помощью кода.

1- Создание класса MyView и установка кода ниже.

public class MyView extends View { 

    public MyView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     // TODO Auto-generated method stub 
     super.onDraw(canvas); 
     float width = (float) getWidth(); 
     float height = (float) getHeight(); 
     float radius; 

     if (width > height) { 
     radius = height/4; 
     } else { 
     radius = width/4; 
     } 

     Path path = new Path(); 
     path.addCircle(width/2, 
     height/2, radius, 
     Path.Direction.CW); 

     Paint paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setStrokeWidth(5); 
     paint.setStyle(Paint.Style.FILL); 

     float center_x, center_y; 
     final RectF oval = new RectF(); 
     paint.setStyle(Paint.Style.STROKE); 

     center_x = width/2; 
     center_y = height/2; 

     oval.set(center_x - radius, 
      center_y - radius, 
      center_x + radius, 
      center_y + radius); 
     canvas.drawArc(oval, 90, 180, false, paint); 
    } 
} 

2-Инициализировать этот класс внутри вас активности или фрагмента: -

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(new MyView(this)); 
} 
+0

спасибо брату. отлично. – testStack

+0

@testStack Приветствуем друга. –

11

Вы можете использовать <clip /> вытягиваемый для отсечения части вашего круга.

http://developer.android.com/guide/topics/resources/drawable-resource.html#Clip

+0

Должно быть пометить как ответ –

+2

хорошо, но не полный ответ. Ответы должны быть в состоянии стоять сами по себе и использовать ссылки только в качестве поддержки. Идея заключается в том, когда android перемещает URL-адрес, этот ответ все равно будет работать. Это не относится к делу. Поскольку мне нужно пойти в другом месте, чтобы узнать, что такое тег клипа. – StarWind0

+1

@StarWind моя ссылка не предоставляет готового к использованию учебника, за которым вы должны следовать, это просто указывает на документацию, которую вы должны прочитать и понять. Не было бы смысла копировать его на сам ответ, так как существует риск того, что он устареет. –

10

Вы можете использовать файл XML-форму прямоугольника и редактировать углы только с одной стороны.

Пример:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <size android:height="30dp" 
     android:width="30dp"/> 
    <solid android:color="@color/black"/> 
    <corners android:topLeftRadius="15dp" 
     android:bottomLeftRadius="15dp"/> 
</shape> 
+0

«Различные размеры угла не поддерживаются в Path.addRoundRect" – Dogcat

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