Android ImageView调整父级的高度和适配宽度

2024-03-06

Update: 我通过使用描述的方法解决了这个问题这个答案 https://stackoverflow.com/questions/2991110/android-how-to-stretch-an-image-to-the-screen-width-while-maintaining-aspect-rat

我对这个问题有点困惑,我认为这应该很简单。

因此,我的应用程序下载图像,并在 ImageView(RelativeLayout 的子元素)中渲染位图。 我希望 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"
>
<RelativeLayout android:id="@+id/banner" android:layout_width="fill_parent" android:layout_height="wrap_content"></RelativeLayout>
<TextView  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello"
/>
</LinearLayout>

和代码:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    RelativeLayout banner = (RelativeLayout) findViewById(R.id.banner);
    ImageView imgV = new ImageView(this);

    imgV.setScaleType(ImageView.ScaleType.CENTER_CROP);
    // I tried all the scale types : CENTER_INSIDE : same effect, FIT_CENTER : same effect... 

    imgV.setBackgroundColor(0x00FFFF00);

    imgV.setAdjustViewBounds(Color.BLUE);


    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

    banner.addView(imgV,params);

    // Some code downloading the image stream

    bitmap = BitmapFactory.decodeStream(stream);


    imgV.setImageBitmap(bitmap);

    }

期望:

Result :


感谢@Julien 和@js。 这是 ImageView 的完整解决方案,即使位图小于 ImageView,也会拉伸位图高度并保持纵横比。

public class ResizableImageView extends ImageView {

    public ResizableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
         Drawable d = getDrawable();

         if(d!=null){
                 // ceil not round - avoid thin vertical gaps along the left/right edges
                 int width = MeasureSpec.getSize(widthMeasureSpec);
                 int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());
                 setMeasuredDimension(width, height);
         }else{
                 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         }
    }

}

您可以在 xml 布局中使用此类来代替 ImageView。

<com.example.ResizableImageView
    android:id="@+id/banner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/banner" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android ImageView调整父级的高度和适配宽度 的相关文章

  • 如何替换 Android 中已弃用的 Bundle/Argument get(key) 调用

    我有以下扩展函数 允许我在应用程序活动和片段之间传递捆绑数据项 inline fun
  • 如何使用 gradle 从 3 个子模块构建 1 个 jar

    I have 安卓工作室3 gradle 4 1 梯度工具3 classpath com android tools build gradle 3 0 1 当我有一个模块并使用 gradle 工具 2 时 我使用了 task makeJar
  • 如何在应用程序关闭时在 Android 通知中显示操作按钮?

    我有一个安卓应用程序 对于通知 我们必须显示一些操作按钮 当应用程序打开时 我们可以自由地构建通知并显示操作按钮 但是当应用程序关闭时 通知会在 Android 的通知托盘中收到 应用程序开发人员无法控制构建用户界面和操作按钮 我们现在如何
  • Android 中的 Fragment-Fragment 通信

    我在Android编程方面处于初级水平 所以我需要你真诚的帮助 请任何人帮助我 我正在尝试使用片段构建滑动用户界面 所以我真正的疑问是 我有一个Fragment say FragmentA 它有一个TextView and Button在其
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • 拖动时跳转 ImageView。 getX() 和 getY() 值正在跳跃

    我创建了一个用于拖动视图的 onTouchListener 如果我使用的话 图像可以顺利拖动getRawX and getRawY 问题是 当您向下放置第二个指针然后抬起第一个指针时 图像将跳转到第二个指针 此 onTouchListene
  • socket.io xhr 在连接缓慢时出现错误(3G 移动网络)

    当我在 3G 移动网络 互联网连接速度慢 上测试我的真实聊天应用程序时 Socket io反复断开然后重新连接 我已经记录了原因 它说 xhr post error 这提高了 transport error 然后断开连接 我可以知道什么意思
  • 当满足条件时,如何以编程方式更改 ImageButton src 目标?

    我有一个学校项目 我正在尝试开发一个手电筒应用程序 对于开 关 ImageButton 我想要 4 个自定义图像 如果手电筒关闭 turn on png 默认 turn on pressing png 按下状态 true 如果手电筒打开 t
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • ADB TCPIP 连接问题

    我有两台 Galaxy S3 其中一个已扎根 另一个则未扎根 因此 当我尝试通过本地网络连接它们时 计算机可以看到已root的计算机 但是正常的就卡在tcpip这一步了 所以 我写 adb tcpip 5555 It says restar
  • HMS 核心地图套件在我的 Android 应用程序上根本无法工作

    我正在尝试在我的应用程序中使用华为 HMS 地图套件 我对整体地图很陌生 无论是来自谷歌还是华为 我按照文档中的教程以及华为提供的代码实验室中的说明进行操作 并将我的代码在一起 但是当我运行地图活动时 什么也没有出现 我得到的只是一个空白活
  • ExpandableListview OnGroupClickListener 未触发

    我正在关注这个 以编程方式折叠 ExpandableListView 中的组 https stackoverflow com questions 4314777 programmatically collapse a group in ex
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • 如何为我的 Android Market APK 创建证书?

    我想将我的第一个 APK 应用程序上传到 Android Market 但我收到了此错误 顺便说一下 在 stackoverflow 中搜索时并没有引导我找到正确的链接 市场不接受使用调试证书签名的 APK 创建有效期至少 50 年的新证书
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • Android 中的库可以有自己的意图过滤器吗?

    我想开发一个可以包含在其他 Android 应用程序中的库来拦截某些类型的意图 是否可以 我创建了一个库和一个测试项目 两者都有自己的AndroidManifest xml文件 在库的清单中 我为操作 TEST 定义了一个意图过滤器 但是
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • LifeCycleAware Fragment 中的片段生命周期事件

    我有一个生命周期感知片段和一个LifecycleObserver class public class MyFragment extends Fragment Override public void onCreate Nullable B
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐

  • Ionic 3 - cocoapods 的 xcode 错误

    我尝试构建一个带有推送通知的 ionic 3 应用程序 但我在 iOS 部署方面遇到了一些问题 我在 xcode 中遇到了 3 个错误 diff Podfile lock No such file or directory diff Man
  • 为什么 GHC 使修复变得如此令人困惑?

    查看 GHC 源代码我可以看到定义fix is fix a gt a gt a fix f let x f x in x 在一个例子中fix像这样使用 fix f x gt let x x 1 in x f x 这基本上会产生一系列加一到无
  • 支持索引视图的会话设置

    我在数据库中使用索引视图 因此客户端应该有一些会话连接设置来调用它们 我正在使用 ado net 连接 命令调用存储过程 每次我必须调用存储过程时 我都会创建连接 我希望连接池允许我快速完成此操作 并执行命令以将这些设置应用到当前连接 so
  • 如何在 Android Studio 中显示行号[重复]

    这个问题在这里已经有答案了 我正在发布 如何在 Android Studio 中显示行号 的快速参考 请参阅下面的答案 注意 这个问题已被标记为重复 因为 Android Studio 基于IntelliJ http blog jetbra
  • 相同的字体在 Chrome 与 Firefox、IE 和 Safari 中看起来不同

    该问题与在不同浏览器中呈现字体有关 我很惊讶地发现这个问题只在 Chrome 中重现 它在 Firefox IE8 Safari 甚至 IE6 中运行良好 样品来了 这是代码本身 div style padding top 1px widt
  • ReactJS:使用 useState 管理多个复选框输入

    我有以下示例组件 它使用多个复选框来选择要从对象列表中删除的项目 import React useState from react import styles css const data name test1 result pass na
  • 使用 JLayeredPane 创建棋盘游戏布局

    我有一项任务要求我创建您在图像中看到的布局 作为游戏开发的一部分 我以前从未在桌面应用程序中使用过 Java 因此在使用 Swing 和 AWT 库方面我完全是个菜鸟 该图像建议我们使用 JLayeredPane 作为根容器 然后将其余部分
  • 支持 R2dbcRepository 中的异常处理,或者如何使用我自己的错误处理程序来装饰 R2dbcRepository 中的每个方法调用

    背景 我有一个应用程序范围的通用异常处理程序来翻译来自R2dbcRepository 例如 摘录只是为了显示预期目的 Component public class ErrorHandler public Throwable mapError
  • Javascript insideHtml 不工作

    我想创建一个函数来替换单击后的 h1 html 它似乎不起作用 我不知道我做错了什么 这是我的 JavaScript function changeToYoMaMa el el innerHtml h1 Yo Mama h1 var el
  • 如何绑定到任何可用端口?

    我需要一个将 UDP 数据包发送到某个网络服务器并接收响应的应用程序 服务器回复请求所在的相同端口号 因此我首先需要将我的套接字绑定 到任何 UDP 端口号 对 UDP 端口号进行硬编码是一个坏主意 因为它可能会被同一台 PC 上运行的任何
  • WPF 简单的提示和技巧? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在研究边距和填充时发现负值是可以接受的 并且在适当的情况下会产生很好的效果 例如 如果您的边框带有填充对象 并且您希望填充对象颜色超
  • 动态组件流畅自动映射

    有谁知道如何在 NHibernate 中使用 Fluent Automapping 自动映射动态组件 我知道我们可以将普通类映射为组件 但无法弄清楚如何使用流畅的自动映射将字典映射为动态组件 Thanks 我们成功地使用了以下方法 流畅NH
  • Docker compose 文件所有权

    我使用 Docker Compose 创建了 Django 项目 Dockerfile FROM python 2 7 ENV PYTHONUNBUFFERED 1 RUN mkdir code WORKDIR code ADD code
  • 如何在 Firefox page-mod 中进行重定向?

    我正在尝试将我的 Google Chrome 扩展程序移植到 Firefox Add On SDK 并且我需要该扩展程序来过滤我网站中的页面并进行重定向 例如 如果用户打开 http example com special http exa
  • 向material-ui AppBar组件添加垂直分隔线

    我们如何为 AppBar 设置垂直分隔线muicss 的左 右分隔符组件 https www muicss com docs v1 react dividers 只需插入 div 元素即可height 100 不起作用
  • 检查表是否存在,如果不存在,则在SQL Server 2008中创建它

    我正在 SQL Server 2008 中编写一个存储过程 我需要检查数据库中是否存在表 如果没有 那么我需要创建它 我该怎么做呢 像这样的东西 IF NOT EXISTS SELECT FROM sys objects WHERE obj
  • .htaccess 更改 URL

    所以我有一个 mvc 系统设置 但它不会生成搜索引擎友好的 url 典型的 url 格式如下 http sitedomain com class classMethod parameter valueA parameter2 valueB
  • 从 Flex 中的字符串中取消转义(解码)HTML 字符

    如何取消转义 HTML 编码字符 例如 gt lt 等 来自字符串 在 Flex AS3 中 所以 我有一个字符串 x gt 3 我希望结果字符串为 x gt 3 也许最简单的方法是通过 TextArea 或其他基于文本的组件发送它 这也将
  • 奇怪的“str”对象不可调用python

    大家好 在我的代码中我得到了这个堆栈 Traceback most recent call last File main py line 30 in
  • Android ImageView调整父级的高度和适配宽度

    Update 我通过使用描述的方法解决了这个问题这个答案 https stackoverflow com questions 2991110 android how to stretch an image to the screen wid