2013-04-08 4 views
1

Android 개발이 처음인데 3x3 크기의 이미지 격자로 된 메뉴가있는 앱을 만들려고합니다. 이미지를 크기 조정하고 화면 너비의 1/3을 차지하는 데 문제가 있습니다. 내가 RelativeLayout을 사용해야한다고 생각하지만, android:weight을 지원하지 않는 것 같습니다. 그런 다음 LinearLayout을 시도했지만 가로로만 조정되었습니다.이미지의 2D 그리드를 만드는 방법은 무엇입니까?

저는 하루 종일이 작업을 해오 고 있으며이를 파악하지 못했습니다. 어떤 도움을 주시면 감사하겠습니다.

* 편집 : 나는 폭 android:shrinkColumns="*"TableLayout을 사용하고 높이에 대한 모든 TableRowsandroid:layout_weight="1"를 추가, 작동하는 방법을 발견했다. 나는 android:scaleType="fitCenter"을 사용했다. 스케일 유형이 문제가 아니기 때문에 View를 적합하게 만들 수있었습니다. 이 방법은 너무 큰 이미지에서는 작동하지만 이미지가 너무 작 으면 작동하지 않을 수 있습니다. `

답변

1

1 화면 장치의 높이 및 너비 2 스케일 이미지의 삼분의 값으로 이미지를 확인하고이 코드

에게

을 확인 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

아마 작동 하겠지만, 레이아웃이 정적이어서 XML로 완전히 할 수 있기 때문에 Java 코드와 관련된 것을 사용하는 것을 꺼려합니다. –

+0

@CalvinLi : Java 코드는 안전 목적으로 만 사용되었습니다. Java 코드를 사용하지 않고 여기에 쓴 XML 만 사용하면 여전히 작동합니다. 그러나 모든 9 개의 이미지는 동일한 크기 여야합니다. 먼저 확인해주세요. –

관련 문제