首页 > 编程知识 正文

高宽黄金比例怎么算,最小像素高宽

时间:2023-05-03 23:22:47 阅读:162911 作者:1352

使用ViewPager显示banner时,有些人会直接写下ViewPager的高度。 例如,在xml布局中直接写180dp。

这样的话,每个手机的宽度不同,viewpager里面内容的长宽比就不同,如果显示图片的话,里面的内容就很可能会变形。

本例在代码中动态设置ViewPager的高度,让他的高度始终和宽度呈固定比例。比如宽高比例是2:1,只要让后台配置的图片都是按2:1的话,图片显示就不会变形,体验明显提高一个档次。

本示例使用上一个博客的代码添加一些内容。 上一个博客: Android ViewPager实现无限循环(2.加入小点,优化自动和手动滑动碰撞) )。

布局几乎没有变化

? XML version=' 1.0 ' encoding=' utf-8 '? relativelayoutxmlns 3360 Android=' http://schemas.Android.com/apk/RES/安卓'安卓: layout _ width=' match _ parent '安卓: layout _ height=' match _ parent ' relativelayoutation rent ' Android : layout _ height=' wrap _ content ' Android.suroid VP _ main ' Android : layout _ width=' matchmatch linear layoout ll _ main ' Android : layout _ width=' match _ parent ' Android 360 layout _ height=' wrap _ content ' y=' center ' Android 3360 orientation=' horizontal '/relative layout/re layout

查看代码privaterelativelayoutmrelativelayout:mrelativelayout=(relative layout ) findviewbyid ) r.id.rl_main; /**动态设置代码高度* addOnPreDrawListener,顾名思义,在view出现之前,为*.mrelativelayout.getviewtreeobserver ().addonpredrawlister { @ overridepublicbooleanonpredraw () mrelativelayout.getviewtreeobserver ).removeonpredrawlistener ) ) this; view group.layoutparamslayoutparams=mrelativelayout.getlayoutparams (layout params.height=(int ) ) mrelativelayout.setlayoutparams; 返回真; }; );

增加的内容也非常少

注册侦听器并在view显示之前回调。 回调时,取出view的宽度。 如果高度需要为宽度的一半,则除了2。

注意:removeOnPreDrawListener一定要记得调用,不然会无限次的触发onPreDraw方法。

当然,也有其他方法。 例如,你可以直接获取手机屏幕的宽度,然后除以2。

但是,ViewPager并不一定横向铺满全屏,可能会设置margin个5dp等。 代码需要将dp转换为px,并在屏幕宽度上减去它。

但是,由于其他几个原因必须在运行时确定view的幅度高度,如果要求固定比例,则可以通过该方法解决。

以下三个屏幕快照显示了ViewPager中不同边距的情况

马丁不在的时候

左右的边距都是30dp的情况

左右两边的边距为80dp时

可见ViewPager的宽度比高度均为2:1

最后,一些onPreDraw方法不仅可以取出自己的LayoutParams,还可以在保证其他view已经由系统设定了宽度和高度的情况下,使用其他view的LayoutParams进行操作例如,可以取他的父母view。 因为父view的宽度高度在子view显示之前就已经确定了。(

例如,您需要在旁边放置三个按钮(或图像),三个按钮都是方形的。 例如,在微信朋友圈或qq空间发送9张图像时,如果每行是3张正方形且屏幕满是图像,就可以用这样的代码制作。

mChildView.getViewTreeObserver ().addonpredrawlistener ) newviewtreeobserver.onpredrawlistener @ overridepublicbolic //layout params.height=mparentview.getwidth ()/3,其中子视图的宽度等于父视图的三分之一; //如果您的两个相邻view之间的间隔为x大小,请减去此值//layout params.height=mparentview.getwidth (/3-2 * x )以获取mchildview.setlate 返回真; ();

源代码下载点击打开链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。