如何获取适配器内的视图高度以创建大小的位图?

2024-02-04

我将自定义 CursorAdapter 与自定义项一起使用。 我需要视图高度来调整资源文件夹中位图的大小,并将此调整大小的位图设置为列表项中的 ImegeView;

 @Override
public void bindView(View view, final Context context, final Cursor cursor) {
    final ViewHolder holder = (ViewHolder) view.getTag();

    final int imgCol = cursor.getColumnIndex(TableOdelice.COLUMN_URL);
    int titleCol = cursor.getColumnIndex(TableOdelice.COLUMN_TITRE);
    final int themeCol = cursor.getColumnIndex(TableOdelice.COLUMN_THEME);

    String tempPath = getPath(cursor.getString(themeCol), cursor.getString(imgCol));
    final String path = tempPath.replace(".", "c.");
    String[] arr = cursor.getString(titleCol).split("\\*");
    holder.title.setText(arr[0]);
    holder.subTitle.setText(arr[1]);

    if (itemHeight > 0) {
        showThumb(itemHeight, holder.img, path);
    } else {
        final ImageView v = holder.mainImage;
        v.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                itemHeight = v.getHeight();
                showThumb(itemHeight, holder.img, path);
            }
        });
    }
}

  private void showThumb(int height, final ImageView iv, final String path) {
    if (thumbs.containsKey(path)) {
        iv.setImageBitmap(thumbs.get(path));
    } else {
        InputStream is = null;
        try {
            is = context.getAssets().open(path);
        } catch (IOException e) {
            Log.d("no file at path", path);
            e.printStackTrace();
        }
        if (is != null) {
                Bitmap btm = btmHelper.scaleToHeight(BitmapFactory.decodeStream(is);, height);
            thumbs.put(path, btm);
            iv.setImageBitmap(btm);

        }
    }

}

为了获取视图高度,我使用视图的 OnGlobalLayoutListener() 。

但速度非常慢... 有任何想法吗?


我找到了我的问题的答案。 使用这种结构,我可以为每个视图在适配器内获得正确的视图宽度或高度。

final ImageView v = holder.mainImage;
            v.post(new Runnable() {
            @Override
            public void run() {
                itemHeight = v.getHeight();
                Log.d("Height", "" + itemHeight);
            }

        });
    }

也许它会对某人有所帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取适配器内的视图高度以创建大小的位图? 的相关文章

随机推荐

  • 如何使用kazoo客户端进行leader选举?

    这是 kazoo readthedocs 上提到的代码 election zk Election electionpath my identifier 要传递哪些输入参数才能使特定节点成为领导者 即 electionpath 和 my id
  • jQuery - 数据表插件 - 排序问题

    我正在使用 DataTables 插件http datatables net http datatables net 该插件本身非常有用 但我有一个很大的问题 它以以下格式返回某些搜索的地址列表 1 Main Street 12 Main
  • 如何按插入时间对 Meteor 集合进行排序?

    我正在使用 Meteor 进行我的第一个项目 并且在排序方面遇到一些困难 我有一个表单 用户可以在其中输入格言 然后显示在列表中 目前 最新的警句会自动显示在列表底部 有没有一种简单的方法可以让最新的出现在列表的顶部 I tried Tem
  • 修改glm函数以采用R中用户指定的链接函数

    In glm在 R 中 默认链接函数为Gamma家人是inverse identity and log 现在对于我的特定问题 我需要使用伽玛回归和响应Y以及修改后的链接函数 其形式为log E Y 1 于是我考虑修改一些glmR 中的相关函
  • 在启动过程中程序正常退出。 gdb 不会在断点处中断

    我在尝试使用 gdb 调试任何程序的任何代码上都会收到此 gdb 错误 这是重现错误的最简单过程 创建一个main cpp包含以下内容的文件 int main return 0 Run g g main cpp Run gdb a out
  • 如何在创建表中创建非聚集索引?

    Create table FavoriteDish FavID int identity 1 1 primary key not null DishID int references Dishes DishID not null Celeb
  • 有没有办法让跟踪显示 Kogito 中为 DMN 执行的决策顺序?

    我终于运行了我的 dmn quarkus 示例示例 是否有一个属性可以启用跟踪 以便打印执行的决策序列 我注意到 当我为 DMN 模型提供不正确的 JSON 时 Kogito 会做出详细响应 告诉我哪个决策失败了 这太棒了 是否有一个属性可
  • 实体框架代码优先 - 非主键字段的外键

    我有两张表 如下所示 dbo ReviewType ReviewTypeId INT PRIMARY KEY ShortName CHAR 1 Unique Index Description dbo Review ReviewId INT
  • 等待 Casper.js 中的 URL 更改?

    有一个waitForUrl 功能在Casper js 但是有可能吗waitForUrlChange in Casper js 我的意思是检测到变化this getCurrentUrl 价值 我无法预测新的 url 值 它可以是任何东西 有一
  • 多个进程上的 fs.createWriteStream

    如何实现多个 Node js 进程写入同一个文件的系统fs createWriteStream 这样它们就不会覆盖数据 看起来 fs createWriteStream 的默认设置是在调用该方法时清除文件 我的目标是清除一次文件 然后让所有
  • MongoDB:聚合并展平数组字段

    在使用关系数据库 SQL Server MySQL Oracle Informix 28 年之后 我已转向 MongoDB 过去两周进展缓慢 我想提出几个问题来证实我的想法 我的文档如下所示 忽略此问题的分组 id xyz 800 site
  • emberjs 1.0.0pre4 如何将上下文对象传递给资源“...Index”路由?

    在一个简单的 ember 应用程序中 我有一个带有索引模板的资源 详细信息 在应用程序索引模板中 我有一个调用的按钮transitionTo detail obj 在索引控制器上 其中obj是被单击的内容项 这通过obj as the mo
  • ruby 中的反引号和单引号错误消息 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 为什么 ruby 在错误消息中使用反引号和单引号 bad method NameError undefined local variable o
  • Android获取外部存储绝对路径

    我想下载一些文件并将它们保存到手机 平板电脑的内部存储中 已在 Samsung Galaxy Note 2 和 Galaxt Tab 10 1 上试用 当我使用 storage sdcard0 在他们身上 代码运行成功 但是当我使用Gala
  • Require.js 忽略 baseUrl

    好吧 这让我发疯 所以也许有人可以指出我正确的方向 我使用最新的 require js 和 jquery 作为我的模块加载器 我正在使用data main属性指向一个配置文件baseUrl 当我尝试加载模块时baseUrl被忽略 并且 re
  • Flash:距 MovieClip 最近的点

    我需要限制一个点内DisplayObject艺术家给我的 我让它工作 但仅适用于光标仍在内部的情况bounds 有限对象称为limited function onSqMouseMove event MouseEvent if bounds
  • 在画布中移动按钮

    当鼠标悬停在 UIElement 上并且用户按下 Ctrl 键时 以下代码应该在画布中移动 UIElement void keydown Object sender KeyEventArgs e if e Key Key LeftCtrl
  • 如何运行本地 Windows 应用程序并将输出通过管道传输到浏览器

    我有 Windows 应用程序 EXE 文件是用 C 编写并使用 MS Visual Studio 构建的 它将 ASCII 文本输出到标准输出 我希望增强 ASCII 文本以包含有限的 HTML 和一些链接 我想调用此应用程序 EXE 文
  • 将向量列表转换为计数数据帧[重复]

    这个问题在这里已经有答案了 我有一个存储在如下列表中的字符向量列表 basket1 lt c Apple Orange Banana Apple Apple Grape basket2 lt c Grape Grape Grape Grap
  • 如何获取适配器内的视图高度以创建大小的位图?

    我将自定义 CursorAdapter 与自定义项一起使用 我需要视图高度来调整资源文件夹中位图的大小 并将此调整大小的位图设置为列表项中的 ImegeView Override public void bindView View view