1

私は Android 開発に不慣れで、3x3 グリッドの画像で構成されるメニューを持つアプリを作成しようとしています。画像をスケーリングして、それぞれ画面幅の 1/3 を占めるようにするのに問題があります。を使うべきだと思いますRelativeLayoutが、サポートしていないようですandroid:weight。次に試してみLinearLayoutましたが、水平方向にしかスケーリングされませんでした。

私は一日中これに取り組んできましたが、それを理解することができませんでした。どんな助けでも大歓迎です。

*編集:幅にTableLayoutwithを使用し、高さに all を追加する方法を見つけました。使用しました。しかし、スケールタイプは問題ではなく、ビューを合わせることが問題でした。この方法は、大きすぎる画像には機能しますが、小さすぎる画像には機能しない可能性があります。`android:shrinkColumns="*"android:layout_weight="1"TableRowsandroid:scaleType="fitCenter"

4

2 に答える 2

1

1st Screen デバイスの高さと幅を取得します 2nd イメージをイメージの 3 分の 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;
}


}
于 2013-04-08T06:02:29.130 に答える
0

GridView ( http://developer.android.com/guide/topics/ui/layout/gridview.htmlおよびhttp://developer.android.com/reference/android/widget/GridView.htmlを参照)を使用できます。 numColumns を 3 に設定します。ImageView については、ScaleType を試して、FIT_XY などのケースに最適なものを確認できます。

お役に立てれば。

于 2013-04-08T04:22:21.203 に答える