平移相对布局/图像视图

时间:2014-12-19 03:43:32

标签: android view imageview scale relativelayout

所以我在这里阅读了很多问题,并尝试了很多东西试图让它发挥作用。我要么误解了我所读过的所有例子,要么误解了错误的东西。

我要做的是在包含图像视图的相对布局中设置相对布局。我希望能够使相对布局与imageview的大小相匹配(我希望根据特定的屏幕大小进行缩放)以保持恒定的方形大小。这个视图也包含按钮。当我运行下面的代码时,我得到一个图像视图的正方形,但按钮显示在屏幕的顶部。因此在我看来,imageview正确缩小为正方形,但布局本身仍然匹配整个屏幕尺寸。我有一个XML文件设置如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
 >

<RelativeLayout
    android:id="@+id/layout_two"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"

    >

    <ImageView
    android:id="@+id/image_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:src="@drawable/bg" />

    <Button
        android:id="@+id/button_one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_one" />

   ....

    </RelativeLayout>


</RelativeLayout>

下面的Java代码:

public class MainActivity extends ActionBarActivity {

RelativeLayout layoutTwo, mainLayout;

Button buttonOne, buttonTwo, buttonThree, buttonFour, buttonFive;
Button buttonSix, buttonSeven, buttonEight, buttonNine;

ImageView scalingBackground;

int screenWidth, screenHeight, finalSquare;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainLayout = (RelativeLayout) findViewById(R.id.main_layout);
    layoutTwo = (RelativeLayout) findViewById(R.id.layout_two);
    scalingBackground = (ImageView) findViewById(R.id.image_view);

    initializeButtons();

    squareBackground();

}


private void squareBackground() {

    screenWidth = mainLayout.getLayoutParams().width;

    scalingBackground.getLayoutParams().height = screenWidth;
    scalingBackground.getLayoutParams().width = screenWidth;
    layoutTwo.getLayoutParams().height = screenWidth;
    layoutTwo.getLayoutParams().width = screenWidth;

}

不太清楚这里发生了什么,我很欣赏正确的方向。感谢

1 个答案:

答案 0 :(得分:0)

您可以使用高度和宽度相同的自定义图像视图。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
 >

<RelativeLayout
    android:id="@+id/layout_two"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"

    >

    <com.packagename.SquareImageView
    android:id="@+id/image_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:src="@drawable/bg" />

    <Button
        android:id="@+id/button_one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_one" />

   ....

    </RelativeLayout>


</RelativeLayout>

为自定义imageview创建一个类。

public class SquareImageView  extends ImageView {
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int width = getMeasuredWidth();
    setMeasuredDimension(width, width);
  }
}