2013-04-08 45 views
1

我是Android開發新手,我試圖製作一個應用程序,它具有由3x3圖像網格組成的菜單。我無法使圖像縮放,並佔用每個屏幕寬度的三分之一。我認爲我應該使用RelativeLayout,但我似乎不支持android:weight。然後我嘗試了LinearLayout,但它只能水平縮放。如何製作二維網格圖像?

我一直在這一整天工作,一直無法弄清楚。任何幫助,將不勝感激。

*編輯:我發現這樣的作品,使用TableLayoutandroid:shrinkColumns="*"的寬度,並添加android:layout_weight="1"所有TableRows身高的方法。我用android:scaleType="fitCenter"。但規模類型不是問題,讓視圖適合。此方法適用於太大的圖像,但對於太小的圖像可能不起作用。 `

回答

1

1日得到屏幕設備高度和寬度 第二縮放圖像到圖像的三分之一值,並重新分配給它

檢查這個代碼

main.xml中

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.33" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.33" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/imageView4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView6" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.33" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/imageView7" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView8" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView9" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.33" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

</LinearLayout> 

這裏是MainActivity.java文件

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Matrix; 
import android.os.Bundle; 
import android.view.Display; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ImageView img[] = new ImageView[9]; 
    img[0] = (ImageView) findViewById(R.id.imageView1); 
    img[1] = (ImageView) findViewById(R.id.imageView2); 
    img[2] = (ImageView) findViewById(R.id.imageView3); 
    img[3] = (ImageView) findViewById(R.id.imageView4); 
    img[4] = (ImageView) findViewById(R.id.imageView5); 
    img[5] = (ImageView) findViewById(R.id.imageView6); 
    img[6] = (ImageView) findViewById(R.id.imageView7); 
    img[7] = (ImageView) findViewById(R.id.imageView8); 
    img[8] = (ImageView) findViewById(R.id.imageView9); 


    Display mDisplay= getWindowManager().getDefaultDisplay(); 
    int Devicewidth= mDisplay.getWidth(); 
    int DeviceHeight= mDisplay.getHeight(); 
    for(int i=0; i<9 ; i++){ 
     //You can use different images here since i have only one I have used only one 
     Bitmap oldBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
     Bitmap newBitmap = getResizedBitmap(oldBitmap, DeviceHeight/3, Devicewidth/3); 
     img[i].setImageBitmap(newBitmap); 
    } 

} 

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 
    int width = bm.getWidth(); 
    int height = bm.getHeight(); 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 
    Matrix matrix = new Matrix(); 
    matrix.postScale(scaleWidth, scaleHeight); 
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); 
    return resizedBitmap; 
} 


} 
+0

這可能會工作,但我不願意使用任何涉及Java代碼,因爲佈局是靜態的,因此可以完全在XML中完成。 – 2013-04-08 07:10:46

+0

@CalvinLi:java代碼只是爲了安全目的,如果你不使用java代碼,只使用我在這裏寫的XML,那麼它仍然可以工作。但請記住所有9張圖片的尺寸應該相同。請先檢查一下 – 2013-04-08 08:49:18