2016-03-30 4 views
0

Ich möchte zwei Kreise vertikal und ich möchte ihre Größe die Hälfte der übergeordneten Höhe sein. Kurz gesagt, sehen Sie bitte das Bild unten.Skalierung auf die Hälfte der Höhe bei Beibehaltung des Seitenverhältnisses skalieren

Ich möchte die Kreise nach x skaliert werden, die die Höhe von TextView ist, und kann je nach Systemeinstellungen variieren. Ich habe unten ein Layout erstellt, aber es hat nicht funktioniert. Ist das erreichbar?

desired

UPDATE

die Antworten Nach zugewiesen ich einig beliebige Breite und Höhe auf den Kreis, und verändern „fitXY“ auf „centerInside“ (weil ich herausgefunden habe, dass fitXY tut Seitenverhältnis nicht beibehalten). Um verschiedene Systemeinstellungen zu simulieren, setze ich eine beliebige Höhe auf den TextView. Ich stelle die Hintergrundfarbe der ImageViews auf red, um ihre Grenzen zu sehen.

Das Problem ist, wenn die Breite/Höhe des Kreises kleiner ist als 1/2 der TextView Höhe (z. B. Kreisbreite/Höhe = 10dp, TextView Höhe = 100dp) der Kreis nicht vergrößert. enter image description here

Wenn die Breite des Kreises/Höhe größer als 1/2 der Höhe Textview, (zB Kreis Breite/Höhe = 200dp, Textview height = 100dp), dann der Kreis korrekt skaliert wird, aber irgendwie gibt es einige seltsame leere Ränder auf der linken/rechten Seite des Kreises. enter image description here

ENDE UPDATE

habe ich ein Layout wie die folgenden, aber es hat nicht funktioniert.

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

Welches Problem haben Sie genau mit dem Code, den Sie ausprobiert haben? (Ich meine, was passiert?) – Spirrow

+0

Es scheint, dass die Höhe des Zeichens wird 1/2 der Höhe, wie ich es mir gewünscht, aber die Breite des Zeichens scheint nicht automatisch skaliert werden, so dass das Zeichen nicht als a gezeigt wird perfekter Kreis. –

Antwort

0

unten probieren ..

<?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" /> 

Und 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

Die Kreise skalieren nicht. Ich möchte, dass die Höhe der Kreise die Hälfte des TextView ist, egal wie hoch die TextView ist (was je nach Systemeinstellungen variieren kann). –

0

Die unten Layout löst Ihr Problem teilweise. Um es zu vervollständigen, möchten Sie den exakten Wert von layout_height in der Laufzeitumgebung (programmgesteuert) erhalten und die layout_width des LinearLayout (die den hartcodierten Wert 100dp ersetzt) ​​auf die Hälfte des layout_height-Werts setzen.

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

ändern Kreis this.It sollte funktionieren.

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

Ich löste dieses Problem durch Erstellen eines benutzerdefinierten ImageView. Wenn die Breite und die Höhe unterschiedlich sind, legt diese Bildansicht die Breite auf die Höhe fest.

Auf diese Weise muss der kreisförmige Zeichensatz nicht <Size> haben.

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