2015-05-07 11 views
8

Sto provando a creare un layout relativo delimitato all'interno di un cerchio, ovvero il layout relativo dovrebbe essere come il quadrato mostrato nella figura seguente.Disegno di un layout quadrato all'interno di un cerchio

sto cercando di impostare la larghezza e l'altezza del layout:

√((diameter)²/2) che è di circa il 70%

square inside a circle http://www.yogaflavoredlife.com/wp-content/uploads/2010/09/square-circle.gif

public class SquareLayout extends RelativeLayout { 
    public SquareLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int originalWidth = MeasureSpec.getSize(widthMeasureSpec); 
     int originalHeight = MeasureSpec.getSize(heightMeasureSpec); 
     int required = Math.min(originalWidth, originalHeight) * 7/10; 

     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(required, required); 
    } 
} 

Quello che sto ottenendo è una pianta rettangolare, invece di piazza layout:

Qualcuno può guidarmi dove sto sbagliando?

utilizzo Esempio:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <com.example.widget.SquareLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#F55C5C"> 

    </com.example.widget.SquareLayout> 

</RelativeLayout> 
+0

provo il tuo codice e sto ottenendo un quadrato, potrebbe avere a che fare con altre viste nelle vicinanze. –

+0

Sto diventando rettangolare. – Samir

+0

Puoi dare la vista completa SquareFrameInsideCircle? Penso che questo abbia qualcosa a che fare con l'altezza quadrata che non corrisponde all'altezza del cerchio. Soprattutto perché usi 'super.onMeasure (widthMeasureSpec, heightMeasureSpec);' invece di passare richiesto. –

risposta

1

Ecco come ho ottenuto la soluzione. Per prima cosa ho creato una cornice quadrata per contenere tutti i layout.

public class SquareFrame extends FrameLayout { 
    public SquareFrame(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int originalWidth = MeasureSpec.getSize(widthMeasureSpec); 
     int originalHeight = MeasureSpec.getSize(heightMeasureSpec); 
     int required = Math.min(originalWidth, originalHeight); 

     super.onMeasure(
      MeasureSpec.makeMeasureSpec(required, MeasureSpec.EXACTLY), 
      MeasureSpec.makeMeasureSpec(required, MeasureSpec.EXACTLY)); 
    } 
} 

Quindi ha inserito tutti i layout all'interno di quella cornice quadrata.

<com.example.widget.SquareFrame 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#5CF5FC"> 

    <com.example.widget.SquareLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#F55C5C"> 

    </com.example.widget.SquareLayout> 

</com.example.widget.SquareFrame> 

Ecco cosa ho ottenuto una piazza, non è un rettangolo.

Problemi correlati