代码中设置view的大小和位置

150行代码实现自定义九宫格ViewGroup,谷歌flutter 自定义一个ViewGroup的首要任务就是要定义测量逻辑,让ViewGroup知道自己的大小,才能在屏幕上展示出来。 根据上面的分析得出: 当图片只有一张的时候,整个ViewGroup的大小和负责显示图片的ImageView是一样大的。这个大小可以根据图片的宽高比乘以一个预设的宽度或高度得到。这个预设的宽度取决于xml文件里设定或根据UI需求自己定义。 而当有多张图片的时候,宽度有两种情况需要考虑: 在xml文件定义为Wrap_Content模式,宽度根据实际展示的列数乘以每列的宽度 在xml文件中固定数 阅读详情

代码中设置view的大小和位置

1、getViewTreeObserver().addOnPreDrawListener的使用:

(1)使用后要调用.getViewTreeObserver().removeOnPreDrawListener()


2、获取view的大小
通常在OnCreate()和Resume()中是无法获取到view的大小的,可通过设置(getViewTreeObserver().addOnPreDrawListener())监听,在回调中获取view的大小


3、动态设置view的大小和位置
(1)在获取到view的大小和位置后,setLeft()和setRight()可以设置view的大小或者通过layout()函数

(2)调用(1)的方法后并不是马上就能见效,view并不一定就绘制成功了,所以不能马上调用removeOnPreDrawListener().可以加一个if条件判断,通过getLeft

(或者其他函数)得到view的位置1,然后比较位置1与要设置的位置是否相同来确定是否已经绘制成功。



例子:设置view右侧处于屏幕中线
conNectView = (ImageView) findViewById(R.id.connecting);
conNectView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
  // TODO Auto-generated method stub
int screenWidth = MainActivity.this.getWindowManager().getDefaultDisplay().getWidth();
int mid = screenWidth /2;
//Log.e("MainActivity", "right=" + conNectView.getRight());
if(conNectView.getRight() == mid){//当右边位置处于屏幕中间时,移除监听
conNectView.getViewTreeObserver().removeOnPreDrawListener(this);
}
conNectView.setLeft(mid - width);
conNectView.setRight(mid);
//Log.e("MainActivity", "right=" + conNectView.getRight());
return true;
}
});

3、OnGlobalLayoutListener在OnPreDrawListener前面调用


4、可通过getViewTreeObserver来监听输入法是否显示
Android 实现动态修改 View 位置 接着,我们修改布局参数中的位置信息,将要移动的 View 放置在指定的坐标点上。最后,我们调用 setLayoutParams 方法将修改后的布局参数应用到 View 上,从而实现动态改变 View 位置的效果。总结一下,要实现动态改变 View 位置的功能,我们需要通过获取布局参数并修改相应的位置信息来实现。这样,我们就能够根据坐标点动态地调整 View 的位置,达到我们想要的效果。接下来,在 Java 代码中获取到我们要操作的 View,并且获取它的布局参数。你可以根据自己的需求添加更多的功能和逻辑。 阅读详情

相关推荐

自适应陷波器的原理与实现

x(t)是叠加有两个频率干扰信号的输入信号,s(t)是需要保留的有用信号,在输入信号中,我们只知道频率w1和w2,但不知道信号的幅度A和相位θ,自适应陷波器可以估计两个未知的幅度和相位值,这需要我们提供两路相互正交的单频信号,如cos(w1t)、sin(w1t),通过调整其权值,从而合成出与干扰信号完全相同的信号A1cos(w1t+θ1),从而实现干扰信号的滤除。采用LMS算法,在保证不损失其他有用信号的情况下,有效地抑制输入信号中某一频率的干扰,如需滤除多个频率,只需要增加相应的输入信号。

Melkiades2333的博客 6883

Android那些“没用“知识(一)

目录1. addOnPreDrawListener 1. addOnPreDrawListener addOnPreDrawListener方法是

LitterLy的博客 1797

特征模理论指导滤波天线设计的优势和方法

本文探讨了特征模理论在滤波天线设计中的应用优势和方法。特征模理论通过分析天线结构的本征模特性,突破了传统经验设计的局限,实现了辐射与滤波功能的一体化设计。文章重点阐述了如何利用模式显著性(MS)和模式加权系数(MWC)来指导辐射零点的产生,揭示了辐射零点形成的物理机制。通过特征模分析,设计师可以明确调控天线结构和馈电系统,优化滤波性能。这种方法为现代多频/宽带滤波天线设计提供了理论依据和实用工具,显著提升了设计效率和性能指标。

qq_64207806的博客 956

addOnPreDrawListener()的在recycleView中使用的坑

addOnPreDrawListener()在recycleView的item中使用时,即使使用removeOnPreDrawListener(this),但是onPreDraw()还是会被多次调用。 approveTextView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()...

shinecjj的博客 2072

stm32控制舵机_使用URT-1控制飞特舵机上手教程(SM40BL舵机为例)

使用URT-1控制飞特舵机上手教程(SM40BL舵机为例):1,参阅URT-1使用说明.pdf2, 材料清单:① URT-1驱动板② 连接驱动板与电脑的MINI USB 连接线③ 给舵机供电的电源④ 舵机与舵机连接线⑤ 杜邦线(可选)3,将URT-1驱动板与电脑连接4,安装驱动,参阅文件CH340驱动,检查设备管理器串口号。5,舵机连接URT-1驱动板,驱动板接电源,参考下图:6,打开FD软件进行...

weixin_39564510的博客 3431

90nm CMOS工艺下6μW超低功耗LDO设计实战:从原理图到版图全解析

本文详细解析了在90nm CMOS工艺下设计一款静态功耗仅为6μW的超低功耗LDO(低压差线性稳压器)的全过程。文章深入探讨了如何通过改进型翻转电压跟随器(FVF)架构实现无输出电容设计,在满足极低功耗和芯片面积高效(chip-area-efficient)要求的同时,确保环路稳定性与快速瞬态响应,为物联网、可穿戴设备等应用提供关键电源管理解决方案。

weixin_29196613的博客 272

Android开发笔记之遇到的那些坑

在这篇文章中,将记录在Android开发过程中遇到的坑:以后的坑都将记录在这篇文章中…第一坑:视图树测量控件宽高在使用addOnPreDrawListener测量控件宽高时imageView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public

浮生的博客 4866

用Matlab机器人工具箱搞定六轴机械臂建模:从DH参数到3D可视化(附完整代码)

本文详细介绍了如何使用Matlab机器人工具箱进行六轴机械臂建模,从DH参数输入到3D可视化全流程解析。通过正运动学验证、逆运动学求解和交互控制等实战技巧,帮助工程师快速掌握机械臂建模核心方法,并提供完整代码示例解决常见问题。

weixin_27372101的博客 394

getViewTreeObserver().addOnPreDrawListener()的使用

为什么80%的码农都做不了架构师?>>> ...

weixin_34375233的博客 2237

mcgs数据查表功能,用于大量数据对比查找对应数据,减少PLC代码

mcgs脚本实现数据查表功能

qq_24866535的博客 3268

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

statistics+insight+vista+power 356

android布局位置xy,Android_获取控件大小和设置调整控件的位置XY示例,网上很多人对设置控件的位置 - phpStudy...

获取控件大小和设置调整控件的位置XY示例网上很多人对设置控件的位置都使用view.setPadding(left, top, right, bottom) ,其实这玩意很差劲,它是设置自己本身位置的偏移,我们很少需要这种效果,我需要的设置控件相对屏幕左上角的X 、Y位置。众里寻他千百度,蓦然回首,那人却在灯火阑珊处!import android.view.View;import android.v...

weixin_39562197的博客 220

绿米Aqara S1【妙控开关 S1E】版本降级或升级自定义固件的方法

绿米Aqara S1【妙控开关 S1E】版本降级或升级自定义固件的方法

LeeKwen的专栏 2169

android代码动态添加View

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Java代码中动态的生成View //首先我们在onCreate方法中创建一个Button实例: Button button = new Button(this);...

weixin_42582516的博客 3641

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 增加触摸范围,Android使用TouchDelegate增加View的触摸范围

本文为大家分享了Android使用TouchDelegate增加View触摸范围的方法,供大家参考,具体内容如下还不知道TouchDelegate这个东西的可以先看一下API,这里大致说一下它的作用:假设有两个View,分别是v1,v2,我们可以通过v1的setTouchDelegate(bounds, v2)来委派触摸事件,其中bounds是一个Rect。v1中,落在这个范围的TouchEven...

weixin_39977776的博客 255

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

给指定的view添加边框

本文主要记录一种实现给获取焦点的View添加高亮框的方法

jl2011的博客 1511

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

自定义view跟手移动android,自定义ViewGroup[跟随手指移动的view]

1. activity.onCreate()this.setContentView(R.layout.myviewgroup); 或者this.getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.myviewgroup, null));2.myviewgroup.xmlandroid:layout_width...

weixin_33519829的博客 476

Android个人日记app开发,[安卓开发日记] 自定义View

一、自定义View三个步骤:onMeasure,onLayout,onDrawonMeasure 一定要在onLayout之前,之后再onLayoutViewGroup一般不用处理onDraw二、onMeasure方法,测量布局@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super....

weixin_36329425的博客 279

动态改变Android控件大小

一、  方法 使用getLayoutParams() 和setLayoutParams()方法 二、  示例代码 LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) aaa.getLayoutParams();    // 取控件aaa当前的布局参数 linearParams.height = 3

大江的专栏 2626

2021-02-01微信小程序<web-view>页面显示 按钮

推荐阅读:http://www.lht.ren/article/21/ 原文链接: 一、官方文档的webview官方api 1、铺满整个屏幕,不支持自定义导航。 2、不能设置宽高,直接铺满整个页面,一个页面只能有一个webview 3、层级极高,不能通过z-index改变元素属性来浮在上面。 二、 解决办法 官方api只有真机才能实现效果,微信开发者工具不适用 html <web-view src="https://720yun.com/t/a9cjvOsnOa3?scene_id=20949466"

fghfghhgjgj的博客 1899

Android Develop Tricks—1

设置AlertDialog的大小:

eclipse_xu 2298

android 日程安排view,RecyclerView 列表控件中简单实现时间线

时间时间,时间,时间啊;走慢一点吧~看见很多软件中都有时间线的东西,貌似天气啊,旅游啊什么的最多了;具体实现方式很多,在本篇文章中讲解一种自定义View封装的方式。效果先来看看效果。分析软件中,可以看见前面的时间线也就是线条加上圆圈组成;当然这里的圆圈与线条也都是可以随意换成其他的,比如图片等等。当然这里最简单的来说,是上面一个线条,然后一个圆圈,然后下面一个线条;上线条在第一条数据时不做显示,下...

weixin_42499363的博客 536

handler回调主线程_巧用Handler获取View控件信息

众所周知,在Android实际开发中,对于某些复杂多变的情况,控件的位置摆放、大小控制并非是xml类型的layout文件完全可以搞定的。此时,我们通常会使用Java代码来通过动态计算,将指定的控件摆放在相应的位置,并限定其大小。同样地,也需要获取某个控件的大小。 对于获取控件宽、高的方法,大家可以自行谷歌或者百度,大抵无非一下三种方法:给相应的View控件添加ViewTreeObserver回调;...

weixin_32068473的博客 192
上一篇: 安卓网络--网络访问Post和Get
下一篇: scrollview嵌套listview,listview不滚动问题
安卓鸟
博客等级 码龄15年 14粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值