2015-05-07 34 views
8

Tôi đang cố tạo bố cục tương đối được bao quanh trong vòng tròn nghĩa là bố cục tương đối phải giống như hình vuông được hiển thị trong hình bên dưới.Vẽ bố cục hình vuông bên trong một vòng tròn

Tôi cố gắng để thiết lập chiều rộng và chiều cao của bố trí như sau:

√((diameter)²/2) đó là khoảng 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); 
    } 
} 

Những gì tôi nhận được là một bố cục hình chữ nhật thay vì vuông bố cục:

Có ai có thể hướng dẫn tôi nơi tôi đang đi sai không?

mẫu sử dụng:

<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

tôi thử mã của bạn và tôi đang nhận được một hình vuông, có thể nó đã làm với các quan điểm khác gần đó. –

+0

Tôi đang chụp hình chữ nhật. – Samir

+0

Bạn có thể cung cấp chế độ xem SquareFrameInsideCircle đầy đủ không? Tôi nghĩ rằng điều này có một cái gì đó để làm với chiều cao vuông không phù hợp với chiều cao vòng tròn. Đặc biệt là vì bạn sử dụng 'super.onMeasure (widthMeasureSpec, heightMeasureSpec);' thay vì truyền yêu cầu. –

Trả lời

1

Đây là cách tôi có những giải pháp. Đầu tiên tôi tạo một khung hình vuông để giữ tất cả các bố trí.

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)); 
    } 
} 

Sau đó, chèn tất cả bố trí trong khung hình vuông đó.

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

Dưới đây là những gì tôi đã một hình vuông, không phải là một hình chữ nhật.

Các vấn đề liên quan