0

アプリ起動時のエリアに画像を入れたい。画像の数は一定ではないため、動的に画像を作成する必要があります。画像ごとに位置・余白を設定してバランスよく作りたい。

私は次のことを試しましたが、効果はありません。・作成後、imageview.layout()を使用。・LayoutParams.margins()を利用する。・AsyncTaskでマージンを設定する。・activity.runOnUiThread()。

これはコードです:

    // After access server, if needed then add a imageview to the 'c_box'
    // c_box: the parent that imageview to add.
    FrameLayout c_box = (FrameLayout) findViewById(R.id.c_box);

    MarginLayoutParams mlp = new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    ImageView img1 = new ImageView(this);
    img1.setImageResource(R.drawable.c_file);
    img1.setLayoutParams(params);
    img1.setLongClickable(true);
    img1.setId(img_id);
    c_box.addView(img1);

    img1.setOnTouchListener(listener);


    **// it's possible to set the position by layout or margin?
    img1.layout(100, 100, 200, 200);**

invalidate() メソッドを呼び出す場所がわかりません。


// After access server, if needed then add a imageview to the 'c_box'
    // c_box: the parent that imageview to add.
    FrameLayout c_box = (FrameLayout) findViewById(R.id.c_box);

    MarginLayoutParams mlp = new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    mlp.setMargins(100, 100, 200, 200);
    ImageView img1 = new ImageView(this);
    img1.setImageResource(R.drawable.c_file);
    img1.setLayoutParams(mlp);
    img1.setLongClickable(true);
    img1.setId(img_id);
    c_box.addView(img1);

    img1.setOnTouchListener(listener);
4

2 に答える 2

5

最後に、ポイントを見つけました:

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
        Gravity.NO_GRAVITY);

私が逃した3番目のパラメータ(Gravity.NO_GRAVITY )。これを使用すると、幅/高さを設定してどこにでもビューを配置できます。

于 2012-06-15T02:10:24.490 に答える
2

MarginLayoutParams を使用できます

MarginLayoutParams mlp = (MarginLayoutParams) yourImageViewHere.getLayoutParams();
mlp.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);//all in pixels
yourImageViewHere.setLayoutParams(mlp);

マージンを動的に設定するには。

于 2012-05-08T04:09:03.897 に答える