2015-05-07 7 views
8

मैं एक सर्कल के भीतर एक सापेक्ष लेआउट बनाने की कोशिश कर रहा हूं यानी सापेक्ष लेआउट नीचे दिए गए आंकड़े में दिखाए गए वर्ग की तरह होना चाहिए।एक सर्कल के अंदर एक वर्ग लेआउट ड्राइंग

मैं चौड़ाई और के रूप में लेआउट की ऊंचाई निर्धारित करने की कोशिश कर रहा हूँ: है जिसके बारे में 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); 
    } 
} 

√((diameter)²/2) क्या मैं हो रही है वर्ग के बजाय एक आयताकार लेआउट है लेआउट:

क्या कोई मुझे मार्गदर्शन कर सकता है कि मैं गलत कहां जा रहा हूं?

नमूना उपयोग:

<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

मैं आपका कोड आज़माता हूं और मुझे एक वर्ग मिल रहा है, इसे पास के अन्य विचारों के साथ करना पड़ सकता है। –

+0

मुझे एक आयताकार मिल रहा है। – Samir

+0

क्या आप पूर्ण स्क्वायरफ्रेम इनसाइडक्रिकल दृश्य दे सकते हैं? मुझे लगता है कि इस वर्ग की ऊंचाई के साथ कुछ करने के लिए सर्कल ऊंचाई से मेल नहीं खाता है। खासकर जब से आप 'super.onMeasure (widthMeasureSpec, heightMeasureSpec) का उपयोग करते हैं,' आवश्यक पास करने के बजाय। –

उत्तर

1

यहाँ कैसे मैं समाधान मिल गया है। सबसे पहले मैंने सभी लेआउट को पकड़ने के लिए एक वर्ग फ्रेम बनाया।

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

फिर उस वर्ग फ्रेम के भीतर सभी लेआउट डाले।

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

यहाँ है कि मैं क्या एक वर्ग, नहीं एक आयत मिला है।

संबंधित मुद्दे