Android以编程方式添加imageview修复整个屏幕的大小

时间:2019-06-19 15:02:13

标签: java android

我正在以编程方式创建多个ImageView,但遇到一个问题,即在不同的显示器上有不同的ImageView尺寸。 我希望在所有屏幕上固定ImageView的大小。这是我生成那些ImageView的方法:

for (int i = 0; i < myImageList.size(); i++) {
    ImageView iv = new ImageView(this);
    iv.setImageResource(myImageList.get(i));
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(420, 210);
    lp.gravity = Gravity.CENTER;
    iv.setLayoutParams(lp);
    float angleDeg = i * 360.0f / myImageList.size() - 70.0f;
    float angleRad = (float) (angleDeg * Math.PI / 180.0f);
    iv.setTranslationX(320 * (float) Math.cos(angleRad));
    iv.setTranslationY(320 * (float) Math.sin(angleRad));
    iv.setRotation(angleDeg + 80.0f);
    main.addView(iv);
    final int finalI = i;
}

3 个答案:

答案 0 :(得分:0)

您可以引入派生自ImageView的新类,并在该类中进行所有这些调整。然后将ImageView替换为布局等中的类实现

答案 1 :(得分:0)

您的问题有多种解释。

  1. ImageView在所有设备上的大小均应相同-请使用dp。您正在pixels中使用LayoutParams
  2. ImageView应该在所有屏幕上都具有相同的大小-找到屏幕的宽度和高度,设置长宽比,例如。 0.33,并在LayoutParams中使用该因子的宽度和高度。
  3. 在LayoutParams中使用MATCH_PARENT来设置宽度和高度,ImageView会采用(父级的)完整尺寸。

这个问题对dppxsp可能有很多有用的解释-What is the difference between "px", "dip", "dp" and "sp"?

答案 2 :(得分:0)

查找屏幕尺寸

public boolean mazeRunner(x, y) {
    if (!isValidDirection) {
        //TODO: output the attempt
    }
    maze[x][y] = 'x';
    //add (x,y) to current attempt
    //we need to count attempt length 
    if (isSolution(x, y)) {
        //TODO: output the successful attempt
    } else if ((
        (mazeRunner(x - 1, y)) ||
        (mazeRunner(x + 1, y)) ||
        (mazeRunner(x, y - 1)) ||
        (mazeRunner(x, y + 1))
        ) == false) {
        //TODO: Output the current failed attempt
    }
    maze[x][y] = '.';
    //TODO: remove (x, y) from the current attempt
}

public void startMazeRunning(char[][] maze, x, y) {
    this.maze = maze;
}

然后,您可以使用此

 ALLOWED_HOSTS = ["my domain", "my ip", "localhost", "127.0.0.1"]

有关所有ScaleType值,请参见此链接

Android ImageView ScaleType: A Visual Guide