在 Android 3.0 开始,View又增加了 x、y、translationX、translationY 四个参数。...x、y 即为上图中的A点,分别对应A点在View坐标系中的X、Y轴上的坐标。 translationX、translationY则为相对于父容器ViewGroup的偏移量,默认为 0。...需要注意的是:在平移过程中,top 和 left 表示的是原始左上角的位置信息,是不变的,发生改变的是 x、y、translationX、translationY。 下面我们来测试看看: y、translationX、translationY 是浮点型的。...onSingleTapUp 触摸后松开,在onDown的基础上加了个 UP 事件,属于单击行为 OnGestureListener onScroll 按下并拖动,由一个 DOWN 和 多个 MOVE
当然有了一定的技术之后,就明白其实实现挺简单。 相机预览 首先是相机预览的实现,因为不是这里的重点,所以直接在Github上找到成熟的代码。...TextureView上展示了相机实时画面。...采样像素点灰度转换成字符,每行成一个字符串,不同行用换行符连接成一个总的字符串,展示到TextView上。...ImageReader是Android API 19后提供的工具类, 它内部有一个Surface, 可以加载和读取图像, 但是不需要直接显示在界面上....就相当于一个没有界面的后台播放器, 我们需要时可以从里面获取当前"播放"的图像数据. ---- ImageReader还能设置图像的格式, 除了RGB外, 另一种常用的格式是YUV.
有同学可能会说了,我直接用TextureView渲染视频画面,然后在TextureView上盖一层ImageView可以吗? 好像显示效果上没有什么问题,但是仔细分析还是不能满足要求?...ImageView无法实现截图的功能 3.ImageView盖在TextureView,会拦截TextureView的事件,造成播放器交互方面的问题。...上面三个问题表示TextureView上面盖一层ImageView的方式是行不通的。 既然行不通,有没有方法可以解决这个问题?...接口,拥有SurfaceView的全部特性,也有view所有的功能和属性,特别是处理事件的能力,它主要是在SurfaceView的基础上它加入了EGL的管理,并自带了一个GLThread绘制线程(EGLContext...创建GL环境所在线程即为GL线程),绘制的工作直接通过OpenGL在绘制线程进行,不会阻塞主线程,绘制的结果输出到SurfaceView所提供的Surface上,这使得GLSurfaceView也拥有了
, 其中 x 和 y 是 View 左上角的坐标,而 translationX 和 translationY 是 View 左上角相对于父容器的偏移量。...这几个参数的换算关系如下所示: val x = left + translationX val y = top + translationY 需要注意的是,View 在平移过程中,top 和 left...表示的是原始左上角的位置信息,其值并不会发生改变,此时发生改变的是 x 、y、translationX 、translationY 这四个参数。...**TouchSlop** TouchSlop 官方解释就是系统所能识别的被认为是滑动的最小距离,通俗点说就是当手指在屏幕上滑动时,如果两次滑动之间的距离小于这个常量,那么系统就认为你没有在滑动,可以通过下面的...的 API 简单明了,我们可以记住一个套路。
显示相机预览内容是每个相机类应用都会包含的功能,想要完美实现这个却并非易事。原因是,在某些特别极端情况下 camera2 API 的使用会变得很复杂,而且在不同设备上的行为还会有所不同。...还好,Jetpack CameraX 库的 PreviewView 可以帮助您解决这一问题。通过在各种 Android 设备上提供开发者友好、一致且稳定的 API,使得展示相机的预览变得不再困难。...下面的示例展示了如何使用触摸监听器 (touch listener) 在 PreviewView 上实现轻点对焦功能: fun onTouch(x: Float, y: Float) { //...Android 设备上提供一致的相机处理行为,这要归功于 CameraX 在自动化测试实验室中对 PreviewView 及其其他 API 上进行的投资。...) 的实现,但是在需要的时候会转而使用 TextureView; 将诸如 ImageCapture 和 ImageAnalysis 这样的用例绑定到 LifecycleOwner 上,创建一个 surfaceProvider
原因是,在某些特别极端情况下 camera2 API 的使用会变得很复杂,而且在不同设备上的行为还会有所不同。...还好,Jetpack CameraX 库 的 PreviewView 可以帮助您解决这一问题。通过在各种 Android 设备上提供开发者友好、一致且稳定的 API,使得展示相机的预览变得不再困难。...下面的示例展示了如何使用 触摸监听器 (touch listener) 在 PreviewView 上实现轻点对焦功能: fun onTouch(x: Float, y: Float) { //...Android 设备上提供一致的相机处理行为,这要归功于 CameraX 在 自动化测试实验室 中对 PreviewView 及其其他 API 上进行的投资。...) 的实现,但是在需要的时候会转而使用 TextureView; 将诸如 ImageCapture 和 ImageAnalysis 这样的用例绑定到 LifecycleOwner 上,创建一个 surfaceProvider
和translationY, x和y是View左上角的坐标, translationX和translationY是View左上角相对于父容器的偏移量。...并且translationX和translationY的默认值是0, View也为它们提供了get/set方法,下面是这几个参数的关系: x=left+translationX y=top+translationY...此时发生改变的是x、y、translationX和translationY这四个参数!!! MotionEvent和TouchSlop 1....TouchSlop 概念:系统所能识别出的被认为是滑动的最小距离, 即当手指在屏幕上滑动时,如果两次滑动之间的距离小于这个常量, 那么系统就不认为你是在进行滑动操作。...建议, 如果只是监听滑动相关的,建议自己在onTouchEvent中实现, 如果要监听双击这种行为的话,那么就使用GestureDetector。
在NowPlayingPage中的HorizontalPanContainer相邻容器视图中创建影子控件,代码如下: TranslationX="{Binding Source={x:Reference...属性将绑定到拖拽物的TranslationX属性上,初步效果如下 拖拽区域需要两个影子控件,分别显示上一曲和下一曲的专辑封面。...,并设置转换器参数,代码如下: 左影子控件(上一曲专辑唱盘) TranslationX="{Binding Source={x:Reference DefaultPanContainer} ,Path..., item.X + item.Width, item.Y, item.Y + item.Height, item.PitName); var isXin = (e.TotalX>0 && translationX...此时已经实现了拖拽唱盘的基本功能,但是在释放唱盘时,影子唱盘并没有如预期那样移动到MiddlePit的中心点。
与ViewAnimation的区别 ViewAnimation只支持几种动画:scale、transition、rotate、alpha四种类型。并且缺陷是只是改变了显示位置,实际位置并没有改变。...Hello按钮使用ViewAnimation进行移动,点击事件在移动后,但是响应还在最初的位置;而属性动画移动的World按钮则不同,响应是跟着按钮走的。...:可以指定多久刷新一帧动画,默认值是每10s刷新一帧,但实际上的值还是要依赖于系统的实际运行情况。...每一帧,经过这么计算,就是属性动画的原理。 关于API 主要是ValueAnimator,ObjectAnimator,AnimatorSet,类结构图如下所示: ?...使用 Animator和Animation一样,既可以代码实现,也可以在xml中定义,下面分别说明两种方式分别是如何操作的。
企业监控:在企业办公场所、生产车间等区域安装 Android 摄像头设备,利用 RTMP 推流技术将监控画面实时推送到管理中心或相关负责人的终端设备上,方便企业进行远程管理和监控,及时发现问题并采取措施...性能更优更高的帧率和更低的延迟:Camera2 API 在处理图像数据时具有更高的效率,能够支持更高的帧率采集,从而可以实现更流畅的视频录制和实时预览。...同时,它的延迟也相对较低,使得拍摄的画面能够更及时地显示在屏幕上,对于需要实时反馈的场景,如视频通话、直播等非常关键,可以提供更好的用户体验。...向后兼容性:虽然 Camera2 是在 Android 5.0(API 21)及以上版本引入的,但它在设计上考虑了向后兼容性。...在较新的 Android 版本中,Camera2 不断得到优化和完善,同时也能够在一定程度上兼容旧版本的特性和功能,使得开发者可以在不同版本的 Android 设备上使用相对统一的开发方式,提高了应用的兼容性和可维护性
今天讲的就是渲染与展示。 说到展示部分就不得不说 View。View 表示屏幕上的一块矩形区域,负责绘制这个区域和事件处理。...SurfaceHolder 它是 Surface 的抽象接口,它使你可以控制Surface的大小和格式,以及在Surface上编辑像素和监视Surace的改变。...它的加入是为了解决SurfaceView渲染线程要单独写开发难度大这个问题而引入的。在 SurfaceView 的基础上,它加入了EGL的管理,并自带了渲染线程。...另外它定义了用户需要实现的Render接口,提供了用Strategy pattern更改具体Render行为的灵活性。...TextureView TextureView 同样继承于View,它在4.0(API level 14)中引入。
② top 属性 : 组件的顶部 y 轴坐标 , 值为顶部距离父容器顶部的高度 , 本组件左上角顶点 , 在父容器坐标系的 y 值 ; ③ right 属性 : 组件的右侧 x 轴坐标 ,...值为右侧距离父容器左侧的长度 , 本组件右下角顶点 , 在父容器坐标系的 x 值 ; ④ bottom 属性 : 组件的底部 y 轴坐标 , 值为底部距离父容器顶部的长度 , 本组件右下角顶点..., 在父容器坐标系的 y 值 ; III ....View 组件的 x , y , translationX , translationY 属性 ---- 1 ....View 坐标获取 0 的解决方案 ---- 1 . 问题描述 : 在获取组件 位置 , 宽高 时 , 经常遇到获取组件的值为 0 的情况 , 这是因为该组件还没有绘制完成 ; 2 .
如果没有SurfaceView,当应用需要使用如GL context(OpenGL ES context)或media decoder(Camera API)这类external buffer source...GLES可以通过把TextureView中的SurfaceTexture传给创建EGL的调用来在TextureView上渲染。...在 API 24 及更高版本中,建议使用SurfaceView而不是TextureView。 两者功能类似并且都是 view hierarchy 中的一员。但是,它们实现方法不一样。...但TextureView在某些功能的实现上比SurfaceView要简单,比如缩放功能的实现:缩放SurfaceView需要FrameLayout的自定义实现,WindowManager需要告诉SurfaceFlinger...你可以在一个并不由Surface支持的EGLSurface上绘图,你也可以在没有EGL的情况下使用Surface。EGLSurface仅仅为GLES提供一个绘图的地方。
— 责任编辑 junyihan 回顾上篇小窗播放视频的原理和实现(上),SurfaceView在它所在的位置上创建一个新的Window,Window创建一个独立的Surface,显示内容渲染在独立的Surface...这使得SurfaceView的绘制可以在单独的线程中进行,从而可以绘制复杂的内容。由于SurfaceView的内容没有显示在宿主窗口中, 这样它的显示需要同步宿主窗口的变化。...1、Android L设备上的动画对比 1.gif 2.gif 在Android L的设备上,SurfaceView在执行移动、缩放动画时,有黑边;旋转动画时,它的画面不会跟随旋转,有黑边;执行透明动画时...2、Android N设备上的动画对比 3.gif 5.gif 在Android N的设备上,SurfaceView在执行移动和缩放动画时,没有黑边;执行旋转动画时,它的画面没有跟随旋转;执行透明动画时...3、Android N设备上的滑动对比 7.gif 8.gif 在Android N的设备上,执行滑动和缩放操作时,SurfaceView有黑边,TextureView没有黑边。
Sectioned Constraints 前面说了,在Scene的ConstraintSet中,你需要对每个发生变化的元素创建Constraint,而且一旦你创建了这个元素的Constraint,那么...Layout中的这个元素的所有约束都将失效,例如你修改了width,即使height没有修改,也需要重写。...Constraint位于ConstraintSet标签内部,用于描述当前的约束行为,你可以把它当作是一个简化的ConstraintLayout,可以在其内部创建约束,但更好的做法是通过layout、motion...Transform相关的状态变更,例如rotation、translationX等 PropertySet:这里你可以修改View的属性,例如Visibility Motion:这里你可以修改跟MotionLayout...All the view transform API such as android:rotation.
首先,最重要的一点也是务必要记住的一点 view 的 getX() getY()方法取得的是以父 view 为参考系的相对坐标 很多人第一次看到 view 的 getX getY 方法以为是取得相对于整个屏幕上的坐标...,很容易在写一些动画效果出现不是预期的效果。...以 getX 方法举例 方法的定义如下: /** *返回的是该 view 的视觉上的 x 轴坐标值,以像素为单位。...在正常情况下,当布局完毕后,子 view 的 mLeft 值被定下来。...我们假定 button 现在的父 view 为 buttonParent。这里为了容易在视觉上辨认给 buttonParent 设置了一个背景色。
Transition 这个词的本意是转换,在 Android 里指的是切换界面时的动画效果,这个在逻辑上要复杂一点,不过它的重点是在于切换而不是动画,所以它也不是这次要讨论的内容。...BounceInterpolator 在目标值处弹跳。有点像玻璃球掉在地板上的效果。 ? 耍花样 +1。...有一段时间完成度没有对应的动画完成度,即动画出现「中断」——程序 FC 除了上面的这些,Android 5.0 (API 21)引入了三个新的 Interpolator 模型,并把它们加入了 support...实际上,这点区别,在实际应用中用户根本察觉不出来。...withEndAction() 设置的回调只有在动画正常结束时才会被调用,而在动画被取消时不会被执行。这点和 AnimatorListener.onAnimationEnd() 的行为是不一致的。
,具体地址如下: https://github.com/glumes/camera 官方并没有提到 CameraX 库具体如何进行 OpenGL 线程渲染的, 继续往下看,你会找到答案的~~~ 关于 CameraX...Camera 模型及 API 接口演变 https://glumes.com/post/android/android-camrea-api-evolution/ 对于一个简单能用的 Camera...而预览的图像最终要呈现到 Android 的 Surface 上,因此选择分辨率的时候要考虑 Surface 的宽高比例,不要出现比例不匹配导致图像拉伸的现象。...21 cameraTextureView.setTransform(matrix) 22} TextureView 旋转的设置同样在 OnPreviewOutputUpdateListener...然后再把这纹理 ID 绘制到 OpenGL 对应的 Surface 上,这可以看成是两个不同的线程在允许,一个 Camera 预览线程,一个 OpenGL 绘制线程。
因为TextureView是从Android 4.0(API level 14)开始才有的(TexturView算是SurfaceView的一个增强版),所以在Android 4.0之后使用的是TextureViewPreview...CameraViewImpl是用来实现相机开启、设置相机参数以及实现各种相机功能的核心类,根据API level的不同分为三个实现子类,Camera1、Camera2和Camera2Api23,其中Camera2...是为Android 5.0(API level 21)及以上系统提供的,Camera2Api23继承自Camera2,是为Android 6.0(API level 23)及以上系统提供的。...相机权限 众所周知,从Android 6.0开始,Android系统引入了动态权限的机制,所以如果你的应用的targetSDK设置在23及以上的话,你需要在运行的时候检查相机权限是否授予了,如果没有授予的话就要申请...很显然,三星内置的相册(或者文件管理)在显示图片的时候会考虑图片的EXIF信息,实际上这图是横着的,结果显示给你看的时候这图旋转回来了,变成了竖着的。那怎么办呢?
缺点,视觉上 上变化,并不是真正的位置上的变化。 属性动画(Property) 控制属性来实现动画。 特点:最为强大的动画,弥补了补间动画的缺点,实现位置+视觉的变化。...translationX 这里的移动分为沿x、y轴移动,沿x轴时使用translationX,沿y轴移动使用translationY。...如: translationX:0f-> -300f,向左;-300f-> 0f,向右。 2.4、缩放 例:在2s内,沿x轴放大成原来的两倍,然后缩小会原样。...例:在3s内,沿x、y轴同时放大,然后缩小,在缩放的同时还要改变透明度。然后再完成3s的左右移动。...translationX,若沿y轴,使用translationY即可。
领取专属 10元无门槛券
手把手带您无忧上云