2016-03-30 10 views
0

2つの円を縦に並べ、そのサイズを親の高さの半分にしたい。要するに、下の画像をご覧ください。アスペクト比を維持したままスケールの高さの半分になるようにスケーリング可能

円をTextViewの高さであるxに従ってスケーリングしたい場合は、システム環境設定によって異なる場合があります。私は以下のレイアウトを作ったが、うまくいかなかった。これは達成可能ですか?

desired

UPDATE

の回答によると、私は円に、いくつかの任意の幅と高さを割り当てられ、そして私はfitXYがないことが判明しているので、「centerInside」(への「fitXY」に変更アスペクト比を保持しない)。さまざまなシステム設定をシミュレートするために、TextViewに任意の高さを設定します。私はImageViewsの背景色をredに設定して境界線を確認しました。

円の幅/高さがTextViewの高さの1/2より小さい場合(円の幅/高さ= 10dp、TextViewの高さ= 100dpなど)、円は拡大されません。 enter image description here

円の幅/高さがTextViewの高さの1/2よりも大きい場合、(例えば、円の幅/高さ= 200dp、TextViewの高さ= 100dp)、その後の円が正しくスケールされますが、何らかの形でいくつかの奇妙ながあります円の左/右の余白。 UPDATE

OF enter image description here

END私は次のようなレイアウトを作成し、それはうまくいきませんでした。

item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent"> 
     <ImageView 
      android:src="@drawable/circle" 
      android:scaleType="fitXY" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp"/> 
     <ImageView 
      android:src="@drawable/circle" 
      android:scaleType="fitXY" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp"/> 
    </LinearLayout> 
    <TextView 
     android:textAppearance="@android:style/TextAppearance.Large" 
     android:text= "If he's so smart, how come he's dead?" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:gravity="center_vertical" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

circle.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:color="#0000FF"/> 
</shape> 
+0

あなたが試したコードにはどんな問題がありますか? (どういう意味ですか?) – Spirrow

+0

ドローイングの高さは、私が望むように高さの1/2になっているようですが、ドローイングの幅は自動的に拡大縮小されていないようです。完璧な円。 –

答えて

0

以下は試してみてください。..

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 

<LinearLayout 
    android:id="@+id/ll" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:scaleType="fitXY" 
     android:src="@drawable/circle" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:scaleType="fitXY" 
     android:src="@drawable/circle" /> 
</LinearLayout> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@+id/ll" 
    android:layout_centerVertical="true" 
    android:text="If he&apos;s so smart, how come he&apos;s dead?" 
    android:textAppearance="@android:style/TextAppearance.Large" /> 

そしてcircle.xml

<?xml version="1.0" encoding="utf-8"?> 

<solid android:color="#0000FF" /> 

<stroke 
    android:width="2dp" 
    android:color="#fff" /> 

<size 
    android:height="80dp" 
    android:width="80dp" /> 

+0

円の縮尺は変わりません。 TextViewの高さにかかわらず、サークルの高さをTextViewの半分にしたい(これはシステム設定によって異なる場合があります)。 –

0

以下のレイアウトは、部分的に、あなたの問題を解決します。これを完了するには、実行時にlayout_heightの正確な値を(プログラムで)取得し、LinearLayoutのlayout_width(ハードコードされた値100dpを置き換える)をlayout_height値の半分に設定します。 this.Itへ

<?xml version="1.0" encoding="utf-8"?> 

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:numColumns="2" 
    android:columnCount="2" 
    > 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="100dp" 
    android:layout_height="match_parent" 
    android:weightSum="2" 
    android:orientation="vertical" 
    android:layout_column="0" 
    android:layout_row="0" 
    > 

    <ImageView 
     android:src="@drawable/circle" 
     android:scaleType="fitXY" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

    <ImageView 
     android:src="@drawable/circle" 
     android:scaleType="fitXY" 
     android:layout_weight="1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 
</LinearLayout> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:text= "If he's so smart, how come he's dead?" 
    android:layout_column="1" 
    android:layout_row="0" 
    android:gravity="center_vertical" 
    /> 

0

変更円が動作するはずです。

<?xml version="1.0" encoding="utf-8"?> 
<shape 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="oval"> 
     <solid 
      android:color="#0000FF"/> 
     <size 
     android:height="someHeight in dp" 
     android:width="sameWidth in dp" /> 
</shape> 
0

私はカスタムImageViewを作成することでこの問題を解決しました。基本的に、幅と高さが異なる場合、このImageViewは幅を高さに設定します。

この方法を使用すると、サークルドロワブルに<Size>がなくてもかまいません。

public class SquareImageView extends ImageView 
{ 
    public SquareImageView(Context context) 
    { 
     super(context); 
    } 

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

    @Override 
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) 
    { 
     int width = right - left; 
     int height = bottom - top; 
     if(width!=height) 
     { 
      post(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        setMinimumWidth(height); 
       } 
      }); 
     } 
    } 
} 
関連する問題