2017-01-17 5 views
2

je l'être étirable suivant affiché dans un togglebutton rectangulaire:forme circulaire à l'intérieur Rectangle

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="rectangle"> 

      <solid android:color="@color/cerulean_blue"/> 
      <stroke android:color="@android:color/transparent"/> 

      <corners 
       android:radius="@dimen/number_selection_rounding_radius"/> 
     </shape> 
    </item> 
    <item android:left="10dp" android:right="10dp" android:top="5dp" android:bottom="5dp"> 
     <shape android:shape="oval"> 

      <solid android:color="@color/light_background"/> 
      <stroke android:color="@android:color/transparent"/> 

     </shape> 
    </item> 
</layer-list> 

Ceci produit un ovale comme la forme intérieure. Je voudrais en faire un cercle indépendamment de la forme de la vue. J'ai essayé de spécifier différentes valeurs pour l'élément de taille dans la forme. Je comprends que cela devrait affecter la mise à l'échelle, mais il n'a absolument aucun effet indépendamment des valeurs utilisées.

Est-il possible de maintenir un cercle parfait dans ce cas, ou dois-je faire programme?

+0

Vous pouvez le faire en cercle parfait, il suffit de faire en haut et en bas = 10DP = 10DP – HAXM

Répondre

0

Je donnai sur les boutons à bascule rectangulaires et les ont forcés à être carré avec cette classe:

public class SquareToggleButton extends ToggleButton { 
    public SquareToggleButton(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public SquareToggleButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public SquareToggleButton(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     int widthMode = MeasureSpec.getMode(widthMeasureSpec); 
     int widthSize = MeasureSpec.getSize(widthMeasureSpec); 
     int heightMode = MeasureSpec.getMode(heightMeasureSpec); 
     int heightSize = MeasureSpec.getSize(heightMeasureSpec); 

     int desiredSize = Math.max(widthSize,heightSize); 

     int width; 
     int height; 

     // Measure Width 
     if (widthMode == MeasureSpec.EXACTLY) { 
      // Must be this size 
      width = widthSize; 
     } else if (widthMode == MeasureSpec.AT_MOST) { 
      // Can't be bigger than... 
      width = Math.min(desiredSize, widthSize); 
     } else { 
      // Be whatever you want 
      width = desiredSize; 
     } 

     // Measure Height 
     if (heightMode == MeasureSpec.EXACTLY) { 
      // Must be this size 
      height = heightSize; 
     } else if (heightMode == MeasureSpec.AT_MOST) { 
      // Can't be bigger than... 
      height = Math.min(desiredSize, heightSize); 
     } else { 
      // Be whatever you want 
      height = desiredSize; 
     } 

     int side = Math.max(width,height); 

     setMeasuredDimension(side, side); 
    } 
}