Android开发网络图片完整显示且不拉伸

2024-05-05 06:32

本文主要是介绍Android开发网络图片完整显示且不拉伸,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      需求:由上往下加载多张网络图片,满横屏完整显示且不拉伸。

      这里有几个问题要解决的,一个是网络图片,一个是完整显示,一个是图片不能出现拉伸问题。

      解决思路:不拉伸完整显示只有等比例缩放图片,ImageView.ScaleType.CENTER_CROP符合,需求中满横屏很关键,那就只有高度不知道了,有已知求未知即可,sw/sh=iw/ih。奇葩的是瓦项目中服务器不返回图片的真实宽高,这又要多一步操作了,先下载生bitmap对象,从中获取图片的宽高来设置imageview的宽高。多张图片也就是不固定数量,所以得动态创建imageview控件,这不难。                      

      关键代码:

                 循环图片地址

llImagesDetail.removeAllViews(); //防止重复添加for (int i = 0; i < goodsImagesResult.getList().size(); i++) {bitmapTask = new BitmapTask(mContext, goodsImagesResult.getList().get(i).getImg());bitmapTask.execute();}
                生成bitmap的任务

/*** 获取网络图片bitmap任务*/private class BitmapTask extends AsyncTask<String, Integer, Bitmap> {private Context context;private String url;public BitmapTask(Context context, String url) {this.context = context;this.url = url;}@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap = ImageAppUtil.getImageBitmap(context, url);return bitmap;}@Overrideprotected void onPostExecute(Bitmap bitmap) {ImageView imageView = new ImageView(context);ImageAppUtil.setSelfImage(context, imageView, url, bitmap.getWidth(), bitmap.getHeight());llImagesDetail.addView(imageView);}}

              设置动态生成imageview的宽高
/*** 图片完整显示自适应屏幕,宽占满* @param imageView* @param url* @param imageWidth* @param imageHeight*/public static void setSelfImage(Context context, ImageView imageView, String url, int imageWidth, int imageHeight){//做图片适配int screenWidth = (int) Utils.getScreenWidthPx(context);LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(screenWidth, (int) (screenWidth * imageHeight / imageWidth));imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);imageView.setLayoutParams(imageParams);ImageLoaderUtil.load(imageView, url, context);}
           代码基本在这里了,不难。其实最后不用再用图片url去设置imageview的图片了,可以直接用之前生成的bitmap来设置。因瓦的项目此方法在很多地方调用,又赖于新建方法。

这篇关于Android开发网络图片完整显示且不拉伸的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961004

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级