2017-02-18 4 views
0

ich in Android bin hier also bitte Geduld :)Android - Platz Image in Grid

In meinem Hauptbildschirm/Haupttätigkeit möchte ich Gitter haben, 2 x N, also möchte ich zwei Spalten und N Reihen haben, . Das Element im Raster ist ImageButton.

Alles funktioniert gut, wenn das img in ImageButtons ist ic_launcher -> dann sind die Elemente im Raster in Ordnung. Aber wenn ich meine Grafik (500x500px) einsetze, sind die "Kacheln" größer als der Bildschirm und ich weiß nicht, wie ich diesen Img "skalieren" soll, damit sie die gleiche Größe haben wie bei ic_launcher.

Hier Code:

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnCount="2" 
    android:rowCount="3"> 

    <ImageButton 
     android:layout_height="wrap_content" 
     app:srcCompat="@mipmap/ic_launcher" 
     android:scaleType="centerCrop" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:layout_width="wrap_content" 
     android:padding="1dp" 
     android:elevation="0dp" 
     android:layout_gravity="fill" /> 
    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@mipmap/ic_launcher" 
     android:layout_gravity="fill" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1"/>  

</GridLayout> 

Bildschirm Hier ist, wenn alles in Ordnung ist:

enter image description here

Was kann ich tun, um meine img maßstabs diese Größe zu passen?

Wichtige Sache: Mein img ist im quadratischen Verhältnis, also möchte ich diesen img zur quadratischen Größe einstufen.

EDIT: wenn ich meine img verwenden sieht es dies wie:

enter image description here

+0

Ich wette, Sie nicht die richtige 'Android verwenden: Scaletype '. Warum zeigst du uns nicht, wie es mit deinem eigenen Bild aussieht? – JonZarate

+0

Warum verwenden Sie zwei ImageButton in GridLayout ?, es macht keinen Sinn. –

+0

@JonZarate ich machte Update, ich testete alle scaleType –

Antwort

1

hier ist mein Versuch ..

MainActivity.java

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 
    private GridView gridView; 
    ArrayList<Integer> integerRes = new ArrayList<>(); 
    { 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 
     integerRes.add(R.drawable.bbent); 


    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     gridView = (GridView) findViewById(R.id.grid); 
     gridView.setAdapter(new GridAdapter()); 


    } 

    class GridAdapter extends BaseAdapter { 

     @Override 
     public int getCount() { 
      return integerRes.size(); 
     } 

     @Override 
     public Object getItem(int i) { 
      return i; 
     } 

     @Override 
     public long getItemId(int i) { 
      return i; 
     } 

     @Override 
     public View getView(int i, View view, ViewGroup viewGroup) { 
      ImageView imageView=new ImageView(getApplicationContext()); 

      imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,440)); 
      // for better result in various devices calculate width at runtime and measure height accordingly 

      imageView.setImageResource(integerRes.get(i)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      return imageView; 
     } 
    } 

} 

grid.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="match_parent" 
    android:orientation="vertical"> 

    <GridView 
     android:id="@+id/grid" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:numColumns="2"/> 
</LinearLayout> 

enter image description here

+0

wow, ich denke, das ist was ich brauche. Wenn ich zurück nach Hause gehe, werde ich es testen und Sie "akzeptieren". Vielen Dank! –

+0

alles ist in Ordnung, aber was soll ich tun, um Höhe gleich Breite einzustellen? Anstatt "440" –

+0

einzugeben, nehmen Sie einfach die Bildschirmbreite zur Laufzeit und setzen sie dort durch dividieren um 2 –

1

ich ein zwicken für das gleiche Problem habe ich konfrontiert ::

Wickeln Sie das Image durch einen Linearlayout als ::

<LinearLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:orientation="horizontal" 
    android:weightSum="2"> 

    <LinearLayout 
    android:layout_height="wrap_content" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:orientation="vertical" 
    android:weightSum="10" 
    android:gravity="center"> 

     <ImageButton 
    android:layout_height="wrap_content" 
    app:srcCompat="@mipmap/ic_launcher" 
    android:scaleType="centerCrop" 
    android:layout_weight="6" 
    android:layout_width="0dp" 
    android:layout_gravity="fill" /> 

    </LinearLayout> 

    <LinearLayout 
    android:layout_height="wrap_content" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:orientation="horizontal" 
    android:weightSum="10" 
    android:gravity="center"> 

     <ImageButton 
    android:layout_height="wrap_content" 
    app:srcCompat="@mipmap/ic_launcher" 
    android:scaleType="centerCrop" 
    android:layout_width="0dp" 
    android:layout_weight="6" 
    android:padding="1dp" 
    android:layout_gravity="fill" /> 

    </LinearLayout> 

</LinearLayout 

Nehmen, um die Margen und Polsterungen an das Image oder Linearlayout je nach Bedarf. Dies ist nur ein Konzept, damit die Dinge auf Ihre Art funktionieren.

+0

ok, es kann funktionieren, aber ich möchte GridLayout haben, nicht Linear. Ich werde die andere Lösung prüfen, wenn es schlecht wird, werde ich Ihre Lösung versuchen. Danke für die Hilfe –