2015-07-29 13 views
6

Używam tego kodu narysować połowę w moim app:jak narysować półkole w Android

<?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> 

wyjściowa:

enter image description here

ale muszę coś jak poniżej:

enter image description here

jak narysować to?

Odpowiedz

9

Proponuję zwrócić go za pomocą kodu.

1- Utwórz klasę MyView i wpisz poniżej kod.

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-Initialize tej klasy wewnątrz fragmentu ty działalności lub: -

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

dzięki bro. to jest świetne. – testStack

+0

@testStack Welcome mate. –

11

Możesz użyć ciągnienia <clip />, aby odciąć część koła.

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

+0

powinien być znak jako odpowiedź –

+2

dobre, ale nie pełnej odpowiedzi. Odpowiedzi powinny być w stanie stać samodzielnie i używać tylko linków jako wsparcia. Pomysł polega na tym, że gdy Android przesunie adres URL, ta odpowiedź będzie nadal działać. Tak nie jest. Jako że muszę iść gdzie indziej, aby dowiedzieć się, co to jest tag klipu. – StarWind0

+1

@StarWind mój link nie zawiera gotowego samouczka, którego należy przestrzegać, to tylko wskazuje na dokumentację, którą należy przeczytać i zrozumieć. Nie byłoby sensu kopiować go do samej odpowiedzi, ponieważ istnieje ryzyko, że stanie się ona przestarzała. –

10

Twój może użyć pliku .xml kształt prostokąta i edytować narożniki tylko po jednej stronie.

Przykład:

<?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

"Różne rozmiary narożników nie są obsługiwane w Path.addRoundRect" – Dogcat

Powiązane problemy