rekuhelena
rekuhelena

Reputation: 23

Android: Changing ImageView size is not working

I am trying to change my ImageView size, but I can't seem to change both - width and height. If I just change one of them, then all works correctly, but when I try to change both, only width is changed.

I have the size in dp: width 22 and height 38, and I convert them to px. Is there another way to do so? I have tried many other ways, but they don't seem to work either.

Could someone tell me, what I should do differently?

Here is my code:

public GridLayout gridLayout;
public GridLayout.Spec row = GridLayout.spec(0);
public GridLayout.Spec col = GridLayout.spec(3);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    gridLayout = (GridLayout) findViewById(R.id.gameGrid);
    createBlock();
}

public void createBlock() {
    ImageView block = new ImageView(this);
    block.setImageResource(R.drawable.red);

    if (gridLayout != null) {
        gridLayout.addView(block, new GridLayout.LayoutParams(row, col));

        int width_in_dp = 22, height_in_dp = 38;
        final float scale = getResources().getDisplayMetrics().density;
        int width_in_px = (int) (width_in_dp * scale + 0.5f);
        int height_in_px = (int) (height_in_dp * scale + 0.5f);

        ViewGroup.LayoutParams layoutParams = block.getLayoutParams();
        layoutParams.width = width_in_px;
        layoutParams.height = height_in_px;
        block.setLayoutParams(layoutParams);

    }
}

Upvotes: 2

Views: 679

Answers (1)

roarster
roarster

Reputation: 4086

Have you tried playing with the block's scaleType? The default is fitCenter but I usually choose centerCrop or fitXY. Here's a good webpage that describes the differences.

You can set the scaleType through ImageView's setScaleType method.

Upvotes: 1

Related Questions