【问题标题】:Positioning an image inside an ImageView with gravity: top使用重力在 ImageView 内定位图像:顶部
【发布时间】:2011-08-14 16:18:37
【问题描述】:
      ╔════════════════════════════════════════════════════════╗
      ║               Linear Layout  (Center)                  ║
      ║    ╔══════════════════════════════════════════════╗    ║   
      ║    ║ ImageView    ╔══════════════╗                ║    ║
      ║    ║              ║              ║    (Center)    ║    ║
      ║    ║              ║ Actual image ║                ║    ║
      ║    ║              ║              ║                ║    ║
      ║    ║              ║  (Center)    ║                ║    ║
      ║    ║              ║              ║                ║    ║
      ║    ║              ╚══════════════╝                ║    ║
      ║    ╚══════════════════════════════════════════════╝    ║ 
      ║                                                        ║
      ╚════════════════════════════════════════════════════════╝

我想这样做:

      ╔════════════════════════════════════════════════════════╗
      ║               Linear Layout  (Center)                  ║
      ║    ╔══════════════════════════════════════════════╗    ║   
      ║    ║ ImageView    ║              ║                ║    ║
      ║    ║              ║              ║    (Center)    ║    ║
      ║    ║              ║ Actual image ║                ║    ║
      ║    ║              ║              ║                ║    ║
      ║    ║              ║  (Top)       ║                ║    ║
      ║    ║              ║              ║                ║    ║
      ║    ║              ╚══════════════╝                ║    ║
      ║    ╚══════════════════════════════════════════════╝    ║ 
      ║                                                        ║
      ╚════════════════════════════════════════════════════════╝

请注意:imageview 具有线性布局的重心 我希望图像视图中的图像具有重力顶部,我尝试设置重力:顶部,但没有任何变化。帮帮我

编辑:这是我的 xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@color/all_white">
    <LinearLayout android:id="@+id/title_bar" style="@style/TitleBar">
        <TextView android:layout_width="wrap_content" 
            android:id="@+id/tv_printweb"
            android:singleLine="true" 
            android:ellipsize="end" 
            style="@style/ScreenTitleText" />
    </LinearLayout>
    <RelativeLayout android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:layout_below="@+id/tv_web_filename" 
        android:layout_above="@+id/tv_web_page_num"
        android:layout_weight="1" 
        android:background="@color/background">
        <LinearLayout android:id="@+id/ln_web_pre"
            android:layout_width="30dp" 
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true" 
            android:gravity="center">
            <Button android:id="@+id/btn_web_pre" 
                android:layout_width="40dp"
                android:layout_height="120dp" 
                android:background="@drawable/bt_left"
                />
        </LinearLayout>
        <LinearLayout android:id="@+id/ln_web_zoomview"
            android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:background="@color/all_white" 
            android:orientation="vertical"
            android:gravity="center" 
            android:layout_centerInParent="true">
            <ImageView android:id="@+id/web_zoomview"
                android:layout_width="fill_parent" 
                android:layout_height="wrap_content"
                android:background="@color/all_white" 
                android:layout_gravity="top"
                />

        </LinearLayout>
        <LinearLayout android:id="@+id/llCircle"
                android:layout_height="fill_parent" 
                android:layout_width="fill_parent"
                android:layout_marginRight="40dp" 
                android:layout_marginLeft="40dp" 
                android:layout_marginBottom="25dp" 
                android:layout_marginTop="25dp">
        </LinearLayout>
        <LinearLayout android:id="@+id/ln_web_next"
            android:layout_width="30dp" 
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true" 
            android:gravity="center">
            <Button android:id="@+id/btn_web_next" 
                android:layout_width="40dp"
                android:layout_height="120dp" 
                android:background="@drawable/bt_right_1"
                />
        </LinearLayout>
        <RelativeLayout android:id="@+id/pagebar_web_top"
            android:layout_width="fill_parent" 
            android:layout_height="30dp"
            android:layout_alignParentTop="true" 
            android:gravity="center_vertical"
            android:paddingLeft="10dip" 
            android:paddingRight="10dip">
            <TextView android:id="@+id/tv_web_page_size"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true" 
                android:gravity="center"
                android:text="Paper Size" 
                android:textColor="@color/all_black"
                android:textStyle="bold" 
                android:background="@drawable/paper_border" />
        </RelativeLayout>

        <RelativeLayout android:id="@+id/web_pagebar"
            android:layout_width="fill_parent" 
            android:layout_height="50dp"
            android:layout_alignParentBottom="true" 
            android:gravity="left"
            android:paddingLeft="10dip" 
            android:paddingRight="10dip">
            <TextView android:id="@+id/tv_page_num"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerVertical="true" 
                android:gravity="center"
                android:text="1/1" 
                android:textColor="@color/all_black"
                android:textStyle="bold" 
                android:background="@drawable/paper_border" />
            <Button android:id="@+id/btn_web_orientation"
                android:layout_width="50dp" 
                android:layout_height="50dp"
                android:layout_alignParentRight="true" 
                android:background="@drawable/rotate_l" />
        </RelativeLayout>

    </RelativeLayout>
    <LinearLayout android:gravity="right|center_horizontal"
        android:id="@+id/toolbar" 
        style="@style/FunctionBar">
        <Button android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:id="@+id/btn_web_print"
            style="@style/FunctionButton" 
            android:text="@string/str_print" />
    </LinearLayout>
</LinearLayout>

【问题讨论】:

标签: android imageview gravity


【解决方案1】:

您可以使用ImageView.ScaleType.MATRIX 并使用ImageView.setImageMatrix() 设置图像矩阵。 Matrix可以使用Matrix.setRectToRect()方法获得。

【讨论】:

    【解决方案2】:

    请检查 Terel 的答案,据说是正确答案。

    根据布局中的其他内容,解决方案可能是使用另一种布局(即相当轻的FrameLayout)代替ImageView,并用ImageView代替实际图片,带有android:layout_gravity="top"

    【讨论】:

    • 我使用线性布局。我尝试了您的所有评论,但我只能更改 imageview 的位置,而不是 imageview 中的图像
    • @ZuzooVn:在 ImageView 中移动图像的唯一方法是使用android:scaleType,唯一可以让你做你想做的事情的设置是android:scaleType="matrix",它的矩阵将转换为图像的水平中心。由于这不是微不足道的,我建议重新考虑您的布局。 (看我的建议)
    【解决方案3】:

    使用RelativeLayout 不是更容易吗?使用android:layout_alignParentTop="true"android:layout_centerHorizontal="true" 可以达到想要的效果。

    【讨论】:

    • 我必须使用线性布局。在我的帖子中查看我的 xml
    • 将每个视图封装在单独的布局中是否有特定的原因?我没有看到它的必要性......
    • 我在我的代码中使用它。它让我更容易在我的应用中显示很多东西
    • 你试过 android:layout_gravity="top|center" 吗?
    • 如果您想保留目前的结构,我找到了两种解决方案。要么将 LinearLayout android:layout_height 设置为 wrap_content,要么将 LinearLayout 的重力设置为 top。
    【解决方案4】:

    您是否尝试过使用属性 android:gravity = "top" 我看到对于您的 ImageView,您正在使用 android:layout_gravity 也许您可以尝试使用另一个。 据我所知,“android:layout_gravity”属性用于设置元素在其父元素中的重力,而“android:gravity”属性用于设置元素内容的重力。 (如果我错了,有人纠正我!=P 嘿嘿!)

    【讨论】:

      【解决方案5】:

      在您的 XML 中将 scaleType 设置为 fitStart

      <ImageView
          android:id="@+id/ivMap"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:scaleType="fitStart" >
      </ImageView>
      

      【讨论】:

      • 谢谢。我正在玩没有输出的重力,scaleType 是我正在寻找的那个..
      • 这不会使图像居中
      • 虽然,在为 fitCenter 制作动画时可能只有一个,但有人愿意使用]
      猜你喜欢
      • 2019-07-14
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 2021-07-10
      • 2013-03-01
      • 1970-01-01
      相关资源
      最近更新 更多