2015-07-29 6 views
6

einen halben Kreis zeichnen diesen Code Ich verwende eine Hälfte in meiner app zu ziehen:wie in 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> 

Ausgang:

enter image description here

, aber ich brauche etwas wie unten:

enter image description here

, wie dies zu ziehen?

Antwort

9

Ich würde vorschlagen, es durch den Code zu ziehen.

1- Erstellen Sie die Klasse MyView und geben Sie den folgenden Code ein.

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-Initialisieren dieser Klasse innerhalb Sie Aktivität oder ein Fragment: -

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

danke bro. das ist toll. – testStack

+0

@testStack Willkommen Kumpel. –

11

Sie können <clip /> ziehbar verwenden, um einen Teil Ihres Kreises abzuschneiden.

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

+0

Sollte Marke als Antwort –

+2

Gut, aber nicht eine vollständige Antwort. Die Antworten sollten in der Lage sein, alleine zu stehen und nur Links als Unterstützung zu verwenden. Die Idee ist, wenn Android die URL bewegt, wird diese Antwort noch funktionieren. Das ist nicht der Fall. Da muss ich woanders hingehen, um zu erfahren, was ein Clip-Tag ist. – StarWind0

+1

@StarWind mein Link bietet keine gebrauchsfertige Anleitung, die Sie befolgen müssen, es zeigt nur auf die Dokumentation, die Sie lesen und verstehen müssen. Es würde keinen Sinn machen, es in die Antwort selbst zu kopieren, da das Risiko besteht, dass es obsolet wird. –

10

Sie können eine rechteckige Form .xml-Datei verwenden und die Ecken nur auf einer Seite bearbeiten.

Beispiel:

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

"Unterschiedliche Eckengrößen werden in Path.addRoundRect nicht unterstützt" – Dogcat