前言 本章内容是android.widget.VideoView,版本为Android 3.1 r1,翻译来自"唐明",由"cnmahj"审核,再次感谢"唐明"!...VideoView 译者署名:唐明 审核:cnmahj 版本:Android 3.1 r1 结构 继承关系 public class VideoView extends SurfaceView implements... android.widget.VideoView 类概述 (图片转载至这里) 用于播放视频文件。 ...关于MeasureSpec类的额外说明:MeasureSpec是一个android.view.View的内部类。它封装了从父类传送到子类的布局要求信息。...每个MeasureSpec对象描述了控件的高度或者宽度。
例如可以是一个VideoView对象,或者是你的activity的主视图。...如果程序依赖于某些隐藏API,可能会在新版本的Android OS上运行出现问题。 而内部API则不计划对外开放。这是android的内部餐厅,开发人员可以视为黑盒子。这里面的东西同样可能发生改变。...同样的,如果您的程序依赖于内部API,在新的Android发布后,可能遇到麻烦。...隐藏API = 正在开发中 内部API = 黑盒 内部和隐藏API的编译时和运行时对比 当您使用Android SDK进行开发时,会引用一个非常重要的jar文件android.jar。...但是当您在设备中运行应用程序时,加载的是framework.jar(大约等价于android.jar),它没有被裁减,包含所有的内部类和隐藏API。所以您可以使用反射机制来访问隐藏API和内部API
然而,在调整尺寸时,我们往往会遇到一个问题:如何保持图像的纵横比?这是一个挑战,因为一旦我们改变了图像的宽度或高度,图像可能会变形,失去其原始的比例和形状。...为了解决这个问题,我们可以使用AI绘画保持图片纵横比插件。这种插件可以在你调整图像尺寸时,自动计算并保持图像的纵横比,确保图像不会变形。 下载安装插件 这种插件的使用方法非常简单。...一旦安装完成,你就可以在你的AI绘画软件中看到一个新的选项,叫做“保持纵横比”。当你调整图像尺寸时,你可以勾选这个选项,软件就会自动计算并保持图像的纵横比。...缩放到最大尺寸 单击后,宽度和高度将根据配置的最大值缩放 纵横比将保留,较小或等效的尺寸将缩放以匹配 缩放到纵横比 单击后,当前尺寸将使用最大宽度或高度缩放到给定的纵横比 即4:3 of 256x512...单击后,当前尺寸将乘以给定的百分比,并保持纵横比 即-25% of 512x256 = 384x192 +50% of 512x512 = 768x768 如果您觉得它们更直观,也可以更改这些显示 即
并至少包含以下配置值: ?...2.1 什么是Multi-resume 谷歌在Android 7.0 时代便支持了多窗口分屏功能,即多个应用可同时共享屏幕,但问题是多个应用无法同时使用,只有具有焦点的应用才能保持在活动(resume)...从 Android P (9.0) 开始,谷歌提供了名为Multi-resume的新功能,允许设备厂商在多窗口模式下保持所有可见应用处于活动状态,解决了分屏的多个应用仅有一个能保持活动状态的问题。...更多指引:布局优化,面面俱到 3.1 最大纵横比 三星可折叠设备外屏将具有长纵横比(21:9),请确保您的应用程序支持长纵横比。 详细适配方法请参考: 屏幕最大纵横比适配指导。...应用连续性 应用连续性是折叠屏手机的一大亮点,当在外屏和内屏之间切换时,应用保持运行状态,并会自动调整大小以匹配新的布局。
而 ImageView还有很多有趣的属性: android:maxHeight:设置ImageView的最大高度; android:maxWidth:设置ImageView的最大宽度; android:...adjustViewBounds:设置ImageView是否调整自己的边界来保持所显示图片的长宽比,需要结合 android:maxWidth、 android:maxHeight一起使用否则单独使用没有效果...fitXY:横向、纵向独立缩放,以适应该 ImageView; fitStart:保持纵横比缩放图片,并且将图片放在 ImageView的左上角; fitCenter:保持纵横比缩放图片,缩放完成后将图片放在...ImageView的中央; fitEnd:保持纵横比缩放图片,缩放完成后将图片放在 ImageView的右下角; center:把图片放在 ImageView的中央,但是不进行任何缩放; centerCrop...:保持纵横比缩放图片,以使图片能完全覆盖ImageView; centerInside:保持纵横比缩放图片,以使得 ImageView能完全显示该图片; 上述的几个属性小编就不给大家做具体展示了,希望各位小伙伴可以自主尝试
layout_constraintHeight_max:将设置此维度的最大大小 layout_constraintWidth_percent和layout_constraintHeight_percent:将此维度的大小设置为父级的百分比...在这种情况下,系统设置满足所有约束的最大尺寸并保持指定的纵横比。要根据另一个特定边的尺寸限制一个特定边,可以预先附加W,“或” H,分别约束宽度或高度。...例如,如果一个尺寸受两个目标约束(例如,宽度为0dp且以父节点为中心),则可以指示应该约束哪一边,通过 在比率前添加字母W(用于约束宽度)或H(用于约束高度),用逗号分隔: <Button android...layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent"/> 上面的代码将按照16:9的比例设置按钮的高度,而按钮的宽度将匹配父项的约束...距离父亲起始位置的距离(左侧或顶部) layout_constraintGuide_end 距离父亲结束位置的距离(右侧或底部) layout_constraintGuide_percent 距离父亲宽度或高度的百分比
它可以作为容器来包含其他视图组件,并根据指定的布局属性进行排列。...-- 子视图元素 --> 在上述代码中,我们创建了一个垂直方向的LinearLayout,并将其宽度设置为与父视图相匹配(match_parent),高度根据子视图自适应...android:gravity:设置LinearLayout内部子视图的对齐方式。 android:baselineAligned:设置是否按基线对齐子视图。...在LinearLayout中,android:layout_width和android:layout_height属性分别设置为match_parent,表示填充父容器的宽度和高度。...通过android:layout_gravity属性可以调整子视图在父容器内的对齐方式。
ijkplayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器,支持播放本地网络视频,也支持流媒体播放。支持Android&iOS。...(可以是网络视频地址) public void setVideoURI(Uri uri); //停止视频播放,并释放资源。...此时视频的宽度、高度、宽高比信息已经获取到,此时可调用seekTo让视频从指定位置开始播放。...public boolean isPlaying(); //获取缓冲百分比。...public class PlayerManager { /** * 可能会剪裁,保持原视频的大小,显示在中心,当原视频的大小超过view的大小超过部分裁剪处理 */ public static final
模式 说明 scaleToFill 缩放模式不保持纵横比缩放图片...,使图片的宽高完全拉伸至填满 image 元素 aspectFit 缩放模式保持纵横比缩放图片,使图片的长边能完全显示出来。...aspectFill 缩放模式保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。...widthFix 缩放模式宽度不变,高度自动变化,保持原图宽高比不变 heightFix 缩放模式高度不变...,宽度自动变化,保持原图宽高比不变 top 裁剪模式不缩放图片,只显示图片的顶部区域
创建一个静态Handler内部类,然后对Handler持有的对象使用弱引用,这样在回收时也可以回收Handler持有的对象,这样虽然避免了Activity泄漏,不过Looper线程的消息队列中还是可能会有待处理的消息...一些建议 对于生命周期比Activity长的对象如果需要应该使用ApplicationContext 对于需要在静态内部类中使用非静态外部成员变量(如:Context、View ),可以在静态内部类中使用弱引用来引用外部类的变量来避免内存泄漏...对于不再需要使用的对象,显示的将其赋值为null,比如使用完Bitmap后先调用recycle(),再赋为null 保持对对象生命周期的敏感,特别注意单例、静态对象、全局性集合等的生命周期 对于生命周期比...5、QQ黑科技:在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上,让自己保持前台状态,保护自己不被后台清理工具杀死 6、在已经root的设备下,修改相应的权限文件,将App伪装成系统级的应用...“需要重绘”的视图,View类内部变量包含了一个标志位DRAWN,当该视图需要重绘时,就会为该View添加该标志位。
视图可能包含尺寸类型的任意组合: 常规宽度,常规高度 紧凑宽度,紧凑高度 常规宽度,紧凑高度 紧凑宽度,常规高度 iOS会根据内容区域的尺寸类型动态地进行布局调整。...iOS定义了两组背景色系统,并对每个系统进行分组,每个系统都包含主要、次要和三级变体,这些变体有助于你传达信息的层级结构。通常,在有分组表视图时使用背景色分组集;否则,使用背景色系统集。...文字颜色 鲜艳度可以帮助在深色背景上保持文本的良好对比度。 使用系统提供的标签颜色作为标签。初级、次级、三级和四级标签颜色会自动适应浅色模式和深色模式下的外观。 使用系统视图绘制文本字段和文本视图。...十、视频(Video) 系统提供的视频播放器可提供两种查看模式:全屏(纵横填充)和适合屏幕(纵横比)。默认情况下,系统根据视频的纵横比选择观看模式,用户可以在播放期间切换模式。 全屏(纵横填充)模式。...始终以原生纵横比显示视频内容。当视频内容使用嵌入式信箱或邮筒模式填充以符合特定的纵横比时,iOS无法根据用户选择的观看模式正确地缩放视频。嵌入的视频会使其在全屏模式和适合屏幕模式下显示得更小。
例如,您可以在平板电脑等设备中使用拆分视图来提供良好的用户体验并明智地使用大屏幕空间。!...在 Android 中,要在单个屏幕上显示多个 UI 视图,您可以使用 Fragments,它们就像可以在应用程序的 Activity 内运行的可重用组件。...屏幕的大小(宽度/高度)和方向(纵向/横向)。...它在内部Expanded或Flexible小部件中特别有用。...纵横比 您可以使用?AspectRatio小部件将子项调整为特定的纵横比。这个小部件首先尝试布局约束允许的最大宽度,然后通过将给定的纵横比应用于宽度来决定高度。
那么就需要定义成block块级元素。 定义成块级元素的原因包括: 完全控制宽高:行内元素的宽高取决于元素内部嵌套的标签内容,本标签只想显示logo,不想嵌套内容。...为什么还要设置宽度? 可以加一个background-color辅助调试。 目前logo是块级元素,会导致导航栏的剩余内容没有地方存放,因此需要指定宽度。...但视频100%可能会溢出父元素,而且是相对窗口大小的溢出。无论多大的窗口,都对多出一段滚动条。...整个对象在填充盒子的同时保留其长宽比,因此如果宽高比与框的宽高比不匹配,该对象将被添加“黑边”。 cover:被替换的内容在保持其宽高比的同时填充元素的整个内容框。...如果对象的宽高比与内容框不相匹配,该对象将被剪裁以适应内容框。 fill:被替换的内容正好填充元素的内容框。整个对象将完全填充此框。如果对象的宽高比与内容框不相匹配,那么该对象将被拉伸以适应内容框。
-- 添加视图元素 --> 添加视图元素:在 ConstraintLayout 内部添加需要布局的视图元素.../> 设置约束条件:使用约束条件来定义视图之间的位置关系。可以将视图与其他视图或父容器的边界进行连接,并指定视图之间的水平和垂直关系等。...辅助属性: app:layout_constraintGuide_percent:在容器内创建一个辅助线,并指定其相对位置的百分比。用于对齐其他视图,而不需要真实存在的视图。...setVerticalBias(float bias):设置视图在垂直方向上的偏移比例。 setWidth(int width):设置视图的宽度。...五 总结 ConstraintLayout的工作原理是通过设置视图之间的宽度、高度和相对位置的约束条件来实现。
telephone=no" /> 2.使用Media Queries适配对应样式 常用于布局的CSS Media Queries 设备类型 all 所有设备; screen 电脑显示器; int 打印用纸或打印预览视图...设备特性 width 浏览器宽度; height 浏览器高度; device-width 设备屏幕分辨率的宽度值; device-height 设备屏幕分辨率的高度值; orientation 浏览器窗口的方向纵向还是横向...,当窗口的高度值大于等于宽度时该特性值为portrait,否则为landscape; aspect-ratio 比例值,浏览器的纵横比; device-aspect-ratio 比例值,屏幕的纵横比。...height:auto; } 将图片的最大宽度设置为100%,以确保图像不会超出其父级元素的宽度,如果父级元素的宽度发生改变,图片的宽度也随之改变,height:auto 可以确保图片的宽度发生改变时...解决方案: 如下栗子中针对不同屏幕宽度加载不同的图片;当页面宽度 在320px到640px之间时加载minpic.png;当页面宽度大于640px时加载middle.png <picture
禁用指令重排序)、可见性;后者还能保证原子性 变量位于主内存中,每个线程还有自己的工作内存,变量在自己线程的工作内存中有份拷贝,线程直接操作的是这个拷贝 被 volatile 修饰的变量改变后会立即同步到主内存,保持变量的可见性...细节: 一个事件序列只能被一个 View 拦截且消耗 View 没有 onIntercept 方法,直接调用 onTouchEvent 处理 OnTouchListener 优先级比 OnTouchEvent...高,onClickListener 优先级最低 requestDisallowInterceptTouchEvent 可以屏蔽父容器 onIntercet 方法的调用 Window 、 WindowManager...3 引入,建议代码实现比较灵活 包括 ObjectAnimator、ValuetAnimator、AnimatorSet 时间插值器:根据时间流逝的百分比计算当前属性改变的百分比 系统预置匀速、加速、...handler 内部类内存泄漏规避:1.使用静态内部类+弱引用 2.界面销毁时清空消息队列 检测:Android Studio Profiler LeakCanary 原理 通过弱引用和引用队列监控对象是否被回收
(包括匿名内部类)默认就会持有外部类的引用,当非静态内部类对象的生命周期比外部对象的生命周期长时,就会导致内存泄漏,通常在Android开发中,如果要使用内部类,但又要规避内存泄漏,一般会采用静态内部类...,LayoutParams类是用于child view(子视图)向parent view(父视图)传递布局(Layout)信息包,它封装了Layout的位置、宽、高等信息。...使用View绘制视图 View类是Android平台中各种控件的父类,是UI(用户界面)的基础构件,View相当于屏幕上的一块矩形区域,其重复绘制这个区域和处理事件,View是所有Weight类(组件类...用户与视图交互,视图接收并反馈用户的动作,视图把用户的请求传给相应的控制器,由控制器决定调用哪个模型,然后由模型调用相应的业务逻辑对用户请求进行加工处理,如果需要返回数据,模型会把相应的数据返回给控制器...Android 中图片的三级缓存策略 三级缓存: •内存缓存,优先加载,速度最快; •本地缓存,次优先加载,速度快;•网络缓存,最后加载,速度慢,浪费流量 ; 三级缓存策略,最实在的意义就是 减少不必要的流量消耗
Appservice 会把准备好的数据用setData的方法返回给视图线程。...(开发者说这样设置的原因是:如果设置 auto ,页面布局会因为图片加载的过程有一个闪的现象(例如高度从 0 到 height ),所以要求一定要设置一个宽度和高度。)...图片包括三种缩放模式scaleToFill、aspectFit、aspectFill和9种裁剪模式,三种缩放模式的实现原理对应如下: scaleToFill{ background-size:100% 100%;//不保持纵横比缩放图片...,使图片的宽高完全拉伸至填满 image 元素 } aspectFit{ background-size:contain;//保持纵横比缩放图片,使图片的长边能完全显示出来。...} aspectFill{ background-size:cover;//保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。
1、回顾addView方法 上篇文章从addView方法一路分析到了performTraversals()方法,这个方法非常长,内部逻辑也很复杂,但是主体逻辑很清晰。...当匹配父容器时,测量模式为MeasureSpec.EXACTLY,测量大小直接为屏幕的大小,也就是充满真个屏幕; 当包裹内容时,测量模式为MeasureSpec.AT_MOST,测量大小直接为屏幕大小,...当前视图是否设置有最小宽度和高度。如果设置有的话,并且它们比前面计算得到的宽度maxWidth和高度maxHeight还要大,那么就将它们作为当前视图的宽度和高度值。 2. 当前视图是否设置有前景图。...如果设置有的话,并且它们比前面计算得到的宽度maxWidth和高度maxHeight还要大,那么就将它们作为当前视图的宽度和高度值。...调用drawChild方法 接下来循环遍历每一个子View,并调用drawChild方法绘制当前视图的子视图View: ?
,必须与父级的LayoutParams一致。...比如,ListView 请求的是位置 6 处的项,并向 ArrayAdapter 传入可重复使用的以前视图,ArrayAdapter 可以通过在回收过的视图里放入数据,使用回收的视图,然后再接着比如通过调用...例如,你可以将同一 ArrayAdapter 与 GridView 相关联,ArrayAdapter 逻辑完全保持不变,GridView 请求的是网格项视图而不是列表项行,适配器依然负责提供这里的每个视图...比如public class WordAdapter extends ArrayAdapter {...}这里必须要创建构造器去匹配父类,因为父类没有默认的空构造器。...映射包含每一行的数据,并应包括“from“中指定的所有条目。 resource:定义此列表项视图的视图布局的资源标识符。
领取专属 10元无门槛券
手把手带您无忧上云