Android中动态调整ImageView的宽高比

2024-01-16 00:58

本文主要是介绍Android中动态调整ImageView的宽高比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理

  • 在写好布局文件后,首先拿到整个屏幕的宽度,然后减去左右两侧的padding和margin所占的宽度,得到的结果就是ImageView应该设置的宽度
  • 再由一定比例计算出高度
  • 最后以ImageView.setLayoutParams()完成宽高的设定

布局文件 

<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="22dp"><ImageViewandroid:id="@+id/image"android:layout_width="match_parent"android:layout_height="wrap_content"android:scaleType="fitXY" /></LinearLayout>

代码块

 

        ImageView image = findViewById(R.id.image);int w = DensityTool.getScressWidth(mContext);int width = w - DensityTool.dp2px(mContext, 22f) * 2;//乘以2是因为左右两侧的宽度int height = (int)(width * 0.424);//设置高度为宽度的0.424倍DensityTool.setWH(image, width, height);

DensityTool

这是我自己造的一个轮子,主要用于像素转换,非常实用的!

package com.pande.elec.pandemimi.utils;import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;public class DensityTool {//获取屏幕宽度public static int getScressWidth(Context context){WindowManager m = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();m.getDefaultDisplay().getMetrics(outMetrics);return outMetrics.widthPixels;}//获取屏幕高度public static int getScresHeight(Context context){WindowManager m = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();m.getDefaultDisplay().getMetrics(outMetrics);return outMetrics.heightPixels;}//根据手机的分辨率从 dp 的单位 转成为 px(像素)public static float dp2px(Resources resources, float dpValue) {final float scale = resources.getDisplayMetrics().density;return (dpValue * scale + 0.5f);}//根据手机的分辨率从 dp 的单位 转成为 px(像素)public static int dp2px(Context context, float dpValue) {float scale = context.getResources().getDisplayMetrics().density;return (int)(dpValue * scale + 0.5f);}//根据手机的分辨率从 px(像素) 的单位 转成为 dppublic static float px2dp(Resources resources, float pxValue) {final float scale = resources.getDisplayMetrics().density;return (pxValue / scale + 0.5f);}//获取屏幕dpipublic static int getDpi(Context context) {return context.getResources().getDisplayMetrics().densityDpi;}//动态设置view的宽高public static void setWH(View view, int width, int height){ViewGroup.LayoutParams layoutParams = view.getLayoutParams();layoutParams.width = width;layoutParams.height = height;view.setLayoutParams(layoutParams);}
}

参考于:https://blog.csdn.net/Chuck_0430/article/details/52092329?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

这篇关于Android中动态调整ImageView的宽高比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Android DataBinding 与 MVVM使用详解

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

Android ViewBinding使用流程

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

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模