下面,我将结合实例,详细介绍GestureDetector的使用接口 & 使用类。 ---- 接口1:OnGestureListener 1....作用 检测用户在屏幕的以下操作:按下瞬间、按压、长按、轻击、快速滑屏、拖动 2....示意图 我在屏幕作出一系列手势进行测试 ? ---- 接口2:OnDoubleTapListener 1. 作用 检测用户单击、双击屏幕 2....双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...---- 总结 本文主要对Android手势识别类:GestureDetector类的使用进行全面讲解 接下来我将继续介绍 Android开发中的相关知识,感兴趣的同学可以继续关注本人博客Carson_Ho
(含实例讲解) 目录 简介 下面,我将结合实例,详细介绍GestureDetector的使用接口 & 使用类。 接口1:OnGestureListener 1....作用 检测用户在屏幕的以下操作:按下瞬间、按压、长按、轻击、快速滑屏、拖动 2....示意图 我在屏幕作出一系列手势进行测试 接口2:OnDoubleTapListener 1. 作用 检测用户单击、双击屏幕 2....双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent
概述 官方API ---- Fragment是什么 Android 在 Android 3.0(API 11 级)中引入了Fragment,主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持...这特别重要,因为模块化片段让您可以通过更改片段的组合方式来适应不同的屏幕尺寸。 在设计可同时支持平板电脑和手机的应用时,您可以在不同的布局配置中重复使用您的片段,以根据可用的屏幕空间优化用户体验。...例如:仍然以新闻应用为例—在平板电脑尺寸的设备上运行时,该应用可以在Activity A 中嵌入两个片段。...不过,在手机尺寸的屏幕上,没有足以储存两个片段的空间,因此Activity A 只包括用于显示文章列表的片段,当用户选择文章时,它会启动Activity B,其中包括用于阅读文章的第二个片段。...()方法加载Fragment的布局文件,接着返回加载的view对象 Step 3:在需要加载Fragment的Activity对应的布局文件中添加fragment的标签, 记住,name属性是全限定类名
一、简述 View是Android中所有控件的基类,不管是简单的Button和TextView,还是复杂的RelativeLayout和ListView,其基类都是View类;ViewGroup也继承了...本文Demo都是在自定义View中进行的,文末有下载链接 View的位置参数 MotionEvent屏幕触摸事件 GestureDetector手势检测(单击,双击,长摁,滑动) 二、View的位置参数...,典型事件如下: ACTION_DOWN–手指刚触摸屏幕 ACTION_MOVE–手指在屏幕上移动 ACTION_UP–手指从屏幕上分开的一瞬间 2、MotionEvent获取点击事件发生的坐标 getX...,移动时要减去上次手指滑动的位置,然后在加上偏移量 存在问题:OnClick方法貌似没法用了哦,大概是因为在onTouchEvent方法中拦截了吧 改进:我觉得可以用GestureDetector对象来实现...只是这么想的,还没有测试。 ?
它将帮助您迈出学习 Android 开发的第一步。 该应用程序将有一个简单的 UI 和几行 java 代码,以便您可以开始进行 android 开发。在获得基本确认后,您当然可以使其功能更加丰富。...为此,请单击下图所示屏幕上的“下一步”按钮。 现在,从选项中选择 Empty Activity 模板,然后单击 Next 按钮。 单击完成按钮。...请记住,这里我们正在创建我们的第一个项目,因此我们将创建一个显示消息“Hello World”和“单击我”按钮的屏幕。 在正文中,tab复制以下代码。...这里给出了按钮的“id”,然后设置了 Click Listener。单击此“单击我”按钮后,我们会看到一个祝酒词(一条显示“按钮已单击!”的短消息)。...选择您已连接的设备,然后单击“确定”按钮。 现在,让 Gradle 构建完成。之后,您会看到您的第一个应用程序在您的 Android 设备上启动。 以下是启动应用程序的屏幕截图。
下面,我就来讲讲自定义控件的那些事。 首先,我来讲讲Android的控件架构。Android的控件可以被分为两类,分别是ViewGroup和View。...当我们想直接绘制出有背景颜色的TextView时,可以在类中定义画笔,在onDraw()进行绘制。...,就可以绘制出一个带矩形框的Textview,但是需要在绘制完成后在调用父类的onDraw(),因为是在系统控件上拓展,所以,还要有其原来的功能。...在Android的坐标系中,我们都知道Android的屏幕在竖屏的时候,以左上角的位置为原点,向右为x轴的正方向,向下为y轴的正方向,知道了这个后,我们就可以通过调用getX()和getY()方法可以获取触摸点的坐标...前面也说过,onInterceptTouchEvent()是事件拦截的核心,那么,只要设置它的返回值为true,就可以拦截事件,使其不再下发,而onTouchEvent()返回false,事件处理后就不会再上传
大家好,又见面了,我是你们的朋友全栈君。...整个过程 在移动设备上安装atx-agent(守护进程),随后atx-agent启动uiautomator2服务(默认7912端口)进行监听 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的...Windows系统可以使用命令在桌面创建一个快捷方式: python -m weditor –shortcut # 或weditor --shortcut 在windows cmd中执行上述命令后,会在桌面上创建一个快捷方式...#选择带有文本'Clock'的对象,它的类名是'android.widget.TextView' d(text='Clock', className='android.widget.TextView')...(最多10秒),出现后单击 d(text="Settings").click(timeout=10) # 在10秒时点击,默认的超时0 d(text='Skip').click_exists(timeout
Android设备的多样性给我们带来了很大的便捷,各Android设备拥有不同分辨率和不同屏幕大小,特别是平板电脑和手机间的差别巨大,使得同样的界面在不同的设备上显示出不同的效果。...一、Fragment概述 Fragment 是一种可以嵌人在Activity中的UI片段,它能让程序更加合理地利用大屏幕空间,因而Fragment在平板上应用非常广泛。...如上图所示的新闻浏览界面,该界面需要在屏幕左边显示新闻列表,并在屏幕右边显示新闻内容,此时就可以在Activity中显示两个并排的Fragment:左边的Fragment显示新闻列表,右边的Fragment...由于每个Fragment都拥有自己的生命周期,并可响应用户输入事件,因此可以非常方便地实现:当用户单击左边列表中的指定新闻时,右边的Fragment就会显示相应的新闻内容。...Fragment提供一个新的方式让我们在不同的安卓设备上统一UI。 Fragment 可以解决Activity间的切换不流畅,轻量切换问题。
大致意思是:实现这个方法去处理屏幕的触摸事件,如果这个方法用于处理单击事件,它将会:播放单击事件的声音,回调OnClickListener 接口的方法,如果可能的话处理单击动作。...方法的参数是一个 MotionEvent 类,用于储存当前触摸事件的信息,我们可以利用这些信息达到我们想要的效果。...,假设我们要在屏幕上自由的移动手指,并且随时把手指的坐标和在 X 、Y 方向上的移动速度显示出来。...case MotionEvent.ACTION_DOWN: /* * getRawX 和 getRawY 方法返回的是当前触摸点相对于屏幕左上角得到的...,让我们在使用这两个接口的时候只需要重写我们需要的方法就行了,根据 Java 的多态性,这个类就是 GestureDetector.OnGestureListener 接口的对象,所以可以作为 GestureDetector
当然了基本每个标签都对应于一个真正的实体类。 所有drawable.xml对应的Java类如下 ? 如何维护(替换)drawable xml是android开发中一个老生常谈的话题。...@BindingAdapter注解,「任意指定的属性」这个属性并非特指我们在布局中Android提供的标准属性,也就是说,我们可以提供任意字符串作为属性,而任意方法很好理解,上面的代码片段很好的表达了这个意思...所以还需要提一下requireAll参数,它表示是否需要每个属性都必须绑定了数据才会调用setViewBackground方法,设置为false后,就可以在布局文件中只指定需要的属性即可。...android:layout_width="60dp" android:layout_height="60dp" / <layout/ 不用怀疑,就是这么简单,即使这里不贴出效果图,我想大家脑海中已经浮现出来了...从成本来说,本方案应该是最低的(特别是对一些已经在使用DataBinding的项目):只需要定义一个方法即可,而效果却是最优的:理论来讲,实现该方案后,可以减少99%的drawable.xml创建。
通过上面的官方介绍,我们可以看到,View 是我们平常看到的视图上所有元素的父类,按钮Button、文本TextView、图片ImageView 等。...ACTION_MOVE:手指在屏幕上滑动。 ACTION_UP:手指离开屏幕的一瞬间。...在 Genymotion上的 Google pixel 9.0系统 420dpi 的模拟器上得到的值如下: MainActivity: getScaledTouchSlop = 21 ---- VelocityTracker...而我们在屏幕上快速滑动时,则会触发 onDown、onShowPress、onScroll、onScroll、onFling这五个回调,onShowPress 取决于你在按下和开始滑动之前的时间间隔,短的话就不会有...onSingleTapUp 触摸后松开,在onDown的基础上加了个 UP 事件,属于单击行为 OnGestureListener onScroll 按下并拖动,由一个 DOWN 和 多个 MOVE
Inflate(resId , parent,true )不仅能够正确的处理,而且已经把resId这个view加入到了parent,并且返回的是parent,和以上两者返回值有绝对的区别,还记得文章前面的例子上...提供支持是指 ArrayAdapter 关系到应该显示在屏幕上的数据集,例如,它可以关系到数组甚至数据列表。...ArrayAdapter具有说明来告诉它自己如何创建列表项视图,并返回给ListView,当屏幕被占满后 ListView 将停止向ArrayAdapter 寻求更多的列表项,列表项视图仅在需要时才创建...TextView setText() 方法来更改名字,这样我们可以向 ListView 返回全新的列表项以便添加到新的层级并显示到屏幕上。...并且知道如何将每项呈现为视图,与此同时 ListView 负责在屏幕上显示这些视图,检测用户的触摸手势,并跟踪用户是否位于整个列表中。
前言 现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。...实现原理 1.1 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去。 Android的界面绘制,都是通过WindowMananger的服务来实现的。...而ViewManager接口有addView方法,我们就是通过这个方法将悬浮窗控件加入到屏幕中去。...,在代码注释处的更新悬浮窗控件布局的方法。...在这里,我先以MediaPlay和SurfaceView播放一个网络视频来模拟一下效果。实现起来与上面的图片播放器基本相同,只是改变了控件和相应的播放逻辑。
本篇博文中使用的创建Notification 是通过一个兼容全部SDK的工具类创建的,因为setLatestEventInfo方法在API11中不建议使用了,而且谷歌在API23 (Android6.0...使用Notification类的setLatestEventInfo方法设置详细信息(改方法已经在6.0废弃,可使用提供的工具类来代替) 使用NotificationManager类的notify方法显示...将Android状态栏滑下来后,单击Notification,就会显示关联的这个Activity。如果Activity已经显示,仍然会显示一个新的Activity,并覆盖当前显示的Activity。...这两个方法用于单击Notification后发出一条广播或者启动一个服务。...---- 清除Notification后触发的善后工作 当我们将状态栏下拉下来之后都会看到在屏幕的右上角有一个“清除“按钮或者图标,单击该按钮可以清除所有的Notification, 那么在清除后,往往需要做一些善后的工作
大家好,又见面了,我是你们的朋友全栈君。...触屏事件 三类简单触屏事件: 单击事件:OnClickListener 长按事件:OnLongClickListener 触摸事件:OnTouchListener 这些方法都是View类的,所以像TextView...直接绑定到标签: 这是单击事件独有的方法,在xml中为组件绑定事件处理方法 android:onClick=“clickName” 然后直接在类中声明方法:public void clickName(...长按事件的返回值是boolean而不是void,所以最后要返回 true或 false。 返回值的含义: 当我们长按时,会触发长按操作,那么如果我们同时也设置了点击监听,我们会不会也触发了点击监听?...当返回true,表示消耗掉了这次事件,也就是说不会有单击的效果。如果返回法false,则在松手的时候会触发单击事件。
背景 在我的Jetpack_Note系列中,对每一篇的分析都有相对应的代码片段及使用,我把它做成了一个APP,目前功能还不完善,代码我也上传到了GitHub上,参考了官方的Demo以及目前网上的一些文章...4.3 LiveData 在LiveData模块,通过生命周期观察LiveData的值,并将它打印在控制台中,点击 开始观察数据 按钮,通过演示生命周期函数,返回桌面或者进入后台,查看LiveData对象的值...Map转换则演示通过转换存储在LiveData对象中的值,并向下传递转换后的数据。...在此Demo中通过点击Map按钮增加UserId,驱动LiveDataViewModel中的userBean来改变,最后展示在TextView中 4....4.4 ViewModel 在ViewModel模块,屏幕中央为一个计时器,通过使用ViewModel存储计时器的值,将屏幕方向发生改变后,数据仍然存在不会销毁。
Android3.0引入Fragment的初衷是为了适应大屏幕的平板电脑,由于平板电脑的屏幕比手机屏幕更大,因此可以容纳更多的UI组件,且这些UI组件之间存在交互关系。...通常创建Fragment需要实现如下三个方法: onCreate():系统创建Fragment对象后回调该方法,在实现代码中只初始化想要在Fragment中保持的必要组件。.../>元素的android:name属性指定Fragment的实现类。 在Java代码中通过FragmentTransaction对象的add()方法来添加Fragment。...onResume():恢复Fragment时被回调,在onStart()方法后一定会回调onResume()方法。 onPause():暂停Fragment时被回调。...onDetach():将该Fragment从Activity中删除、替换完成时回调该方法,在onDestroy()方法后一定会回调onDatach()方法,该方法只会被调用一次。
我承认我有点标题党了,我不可能完整的介绍怎么写小米应用,我这篇要说的其实是模仿MIUI6系统应用“我的小米”的首页,主要实现的UI是一个圆形的头像,下面是用户名,再下面是一些功能的cell,然后向上滑动功能...,姓名TextView,功能Cell布局)在滑动过程中进行位置设定,重绘,所以我们就可以自定义一个ViewGroup去实现。...其实Android support V4架包已经为我们提供了ViewDragHelper类,来辅助我们在自定义ViewGroup时,来处理子View的滑动需求。...//是否允许抓取View,即你手指在屏幕上触摸拖动的View child是否允许被拖动 //我们这里只允许子View mContentRootView拖动。...View释放后,即手指离开屏幕后,这里我们对滑动的速度和手指的最后位置进行判断, //通过判断最后滑动到Top或者Bottom,通过调用mDragHelper.settleCapturedViewAt
有人说我可以用语音去打开,但是你没有想过语音其实只是帮你执行了点击,在手机上不管是玩游戏还是看电影或者是搞学习,都是要使用手机屏幕的,所以你知道屏幕交互有多么重要吗?...,与上面的onSingleTapUp方法不同的地方在于, * 该方法只会在监听器确定了用户在第一次单击后不会触发双击事件时才会被触发。...在Android中,是由GestureDetector类来负责手势的检测,每一个GestureDetector类的实例都代表一个手势监听器。...在创建手势监听器时需要一个类OnGestureListener例。 下面就来实践一下,为了使整个效果更直观,我修改了一下布局 activity_main.xml <?...,与上面的onSingleTapUp方法不同的地方在于, * 该方法只会在监听器确定了用户在第一次单击后不会触发双击事件时才会被触发。
根据不同动作,主要有以下三种事件类型: ACTION_DOWN:手指刚接触屏幕,按下去的那一瞬间产生该事件 ACTION_MOVE:手指在屏幕上移动时候产生该事件 ACTION_UP:手指从屏幕上松开的瞬间产生该事件...点击后抬起,也就是单击操作:ACTION_DOWN -> ACTION_UP 点击后再风骚的滑动一段距离,再抬起:ACTION_DOWN -> ACTION_MOVE -> ... -> ACTION_MOVE...3 MotionEvent事件分发 当一个MotionEvent产生了以后,就是你的手指在屏幕上做一系列动作的时候,系统需要把这一系列的MotionEvent分发给一个具体的View。...的唯一实现类是PhoneWindow。...假如我们想让View默认不可点击,将View的clickable设置成false,在合适的时候需要可点击所以我们又给View设置了OnClickListener,那么你会发现View默认依然可以点击,也就是说
领取专属 10元无门槛券
手把手带您无忧上云