前言 RecyclerVie出来已经有一段时间了,它是Google在 2014 年 10 月推出Android5.0的时候推出了MaterialDesign,而RecyclerView是MaterialDesign...compile 'com.android.support:recyclerview-v7:21.0.3' } 2、使用 在布局文件中使用RecyclerView <android.support.v7....widget.RecyclerView android:id="@+id/recyclerview" android:layout_height="match_parent...@Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { //得到item的view...RecyclerView的Adapter强制要求使用ViewHolder,该ViewHolder须继承RecyclerView.ViewHolder。 对应的item布局 <?
控件在频幕上出现的时间超过1.5s 有效区域出现超过1半 监听View的移入和移出事件 先解决RecyclerView的1.5s这个问题,大家第一个想到的可能都是addOnScrollListener,...(child, index, layoutParams); } } 复制代码 ChildHelper是RecyclerView内部负责专门管理所有子View的一个帮助类。...那么也就是当RecyclerView的子控件被添加到RecyclerView上时,就会触发子view的attachToWindow方法。...剩下来的就是View的detch方法是在哪里被触发的呢,这个就是要看recyclerview的另外一个方法了,就是tryGetViewHolderForPositionByDeadline了。...计算他们的差值,如果当值大于1.5s之后,则调用接口。
当 scroll-view 组件的第一个直接子元素设置了 margin-top 时即使 scroll-view 只有一行也可以滚动。...解决办法: 方案一: 去掉第一个元素的 margin-top,这样的缺点是第一个元素和 scroll-view 顶部紧贴,看着很不舒服。...方案二: 去掉第一个元素的 margin-top,设置 scroll-view 组件的 padding-top 来替代。...下面两个方案几乎没有负面影响: 方案三: 去掉第一个元素的 margin-top,在 scroll-view 组件和第一个子元素之间添加一个高度固定的空白元素。...方案四: 将 scroll-view 组件的所有直接子元素用一个容器包裹,并将容器的宽高都设置为 100%,定位属性与 scroll-view 保持一致。
官方介绍 RecyclerView是ListView的一个更高级、更灵活的版本。RecyclerView组件是为大量的视图组件提供的一种容器,使得它们可以有效的在其中循环和滚动。...RecyclerView的使用 最终要达到的效果 如下图所示 image.png 编写相关的布局文件 MainItem布局如下: ) : RecyclerView.Adapter() { inner class ViewHolder(view: View)...: RecyclerView.ViewHolder(view) { val itemName: TextView = view.findViewById(R.id.itemName)...= findViewById(R.id.recycler_view) recyclerView.layoutManager = GridLayoutManager(
计算出来后,我们需要在绘制view之前先设置好。 使用方法 在BaseActivity的onCreate中调用一下就可以了。...但是对于自定义view和listview,RecyclerView是失效的。...这里再介绍下基于头条的UI适配的低成本方案AndroidAutoSize: AndroidAutoSize对于自定义view,listview,和RecyclerView适配也完全没问题,原理类似。...对于RecyclerView只需在Adapter 的onCreateViewHolder里,调用一下: AutoSizeCompat.autoConvertDensityOfGlobal(context.getResources...()); 即可完美适配RecyclerView的UI显示。
android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation...; import android.view.animation.AnimationSet; import android.view.animation.BounceInterpolator; import...android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation...view) { //RotateAnimation 旋转动画 //第一个参数是开始的的角度,第二个参数是结束的角度 //第三个参数是旋转中心的X坐标类型...view) { //TranslateAnimation 平移动画 //前四个参数是表示X轴父级容器的-0.5平移到父级容器的0.5 //后四个参数是表示
在开发中常常使用到刷新分页,这里实现一个 RecyclerView 的简单的刷新分页操作,测试效果见文末,实现过程参考如下: 实现思路 加载更多数据使用到 RecyclerView 加载多种布局,根据...onCreateViewHolder(ViewGroup parent, int viewType) { View view ; RecyclerView.ViewHolder vh = null;...view) { //根据RecyclerView获得当前View的位置 int position = recyclerView.getChildAdapterPosition(view); //程序执行到此...选项单击事件的回调接口 */ public interface OnItemClickListener{ //参数(父组件,当前单击的View,单击的View的位置,数据) void onItemClick...rv; RvAdapter1 adapter; private ArrayList<String arrayList = new ArrayList< (); //加载更多数据时最后一项的索引 private
image.png StaggeredGridLayoutManager StaggeredGridLayoutManager(瀑布流布局效果),是配合RecyclerView使用的。...:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView...; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView...; textView.setText(info); //手动更改高度,不同位置的高度有所不同 textView.setHeight(100 + (position...: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http:
本文实例为大家分享了Android实现View拖拽的具体代码,供大家参考,具体内容如下 前言 实现View的拖拽,其实原理很简单。...无非就是获取手指的位移信息,然后view根据手指的位移信息,移动对应的位置。 首先是获取手机的位移信息就可以根据需求不同分为两种 拖拽view本身,view实现移动。...则设置view的setOnTouchListener。 在activity中随意滑动,view都会反应出动作。则重写activity onTouchEvent方法。...而移动的方法嘛,也有几种 给view设置补间动画,动画时间为0.(不推荐,因为移动的只是view的影子,本地还在原地) 更改view 的margin。...,希望对大家的学习有所帮助。
前言 前面我们有介绍RecyclerView的使用,详见《Android中RecyclerView嵌套RecyclerView》,这一篇我们来讲讲RecyclerView的不规则Grid显示。...从上图里面我们可以看到,我们在单元模块中有标题栏和功能项,其实这个都昌在一个RecyclerView中实现的,下面我们就来介绍一下实现的方法。...然后我们看一下RecyclerView的布局 rcl_menu.xml <?xml version="1.0" encoding="utf-8"?...; import android.support.v7.widget.RecyclerView; import android.text.TextPaint; import android.text.style.TextAppearanceSpan...; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup
Android View控件的滑动是 Android 的一个重要内容。...(-30, -30); } }); } } 两个按钮,分别对应不同的点击事件来调用 scrollBy 方法和 scrollTo 方法,这里为什么要调用布局的...只需要把 scrollBy 按钮的点击事件改成它本身调用 scrollBy 方法就行了,来看看结果: ?...到这里,我想小伙伴们应该能明白为什么上面要调用 layout.scrollTo 方法和 layout.scrollBy 方法了: scrollTo 方法和 scrollBy 方法移动的是 view...View 的 computeScroll() 方法: 3、调用 startScroll(int startX, int startY, int dx, int dy)方法开始 View 的滑动,参数分别为开始的位置和横纵方向滑动的位移
在Android5.0版本之后,Android官方推出了一个新的控件:RecyclerView ,完全解耦的设计使得RecyclerView比起ListView灵活了太多,应用的场合也非常广泛。...; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import...那么接下来我们来看一下RecyclerView控件的简单用法:我们先用RecyclerView控件来实现上面的功能,你可以选择新建一个Android工程,也可以在上面的ListView控件中的工程中加一个....widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup...方法,用于创建MyHolder对象作为RecyclerView的显示子项 * 每个 RecyclerView 控件的 item 调用这个方法之后调用 * onBindViewHolder
(2)我们的页面列表最好使用recyclerview,因为recyclerview支持局部刷新。(3)数据源驱动UI,千万不要在UI层面判断机型做UI的动态计算,页面会闪屏,体验不好。...在Activity、Fragment、View 中的onConfigurationChanged中获得的newConfig传入,如果获得不了该值,可以使用getScreenType()方法 public...当屏幕类型、横竖屏切换、内外屏切换时,Activity\Fragment\View 会调用onConfigurationChanged方法,因此针对直板手机、折叠屏及Pad可以将数据源的切换放在此处。...>每个楼层也是一个单独的RecyclerView,以楼层4为例,楼层4的每一行商品都是一个RecyclerView,每个RecyclerView使用GridLayoutManager来控制布局的展现列数...== null) { return; } //2、判断当前的屏幕类型,注意:这个地方是调用3提供的方法:ScreenTypeUtil.getScreenType(newConfig
一、文章快速总结RecycleView是安卓的列表,可以灵活控制每一项的数据,布局,动画。Adaper是整体适配器,逻辑放在这里。Holder是每一项的内容,把控件初始化放在这里。...LayoutManager是布局管理器,制定列表的整体布局。ItemDecoration设置项与项之间的分割线。...事件监听,项中小组件就通过holder获取,整体点击的话通过mAdapter.setOnItemClickListener。ItemAnimator设置添加项和删除项的动画。...MyHolder : 这是RecyclerView.ViewHolder的实现类,用于初始化item布局中的子控件。需要注意的是,在这个类的构造方法中需要传递item布局的View给父类 。...onItemClickListener实例进来,有的话会调用他的onItemClick(),将点击事件转移到我们的自定义接口上,传给外面的调用者。
在android客户端中我们经常有自己的定义视图,特别是用fragment的时候,用的还是比较多的,有时候很多响应时间都是在VIew里面完成,发现有时候调用activity的方法都是碰到就搞了,后来越来越发现有些调用底层的硬件的方法是没法搞的...导致你后面调用底层方法是没法用的,换句话说就是无法转换 方法一 其实少用,只是有时候我们用了第三方插件,他需要你传递的context获取是 this.getApplicationContext();...这种形式的,比如百度地图 这种传递context 他实际基类是 application的,不是activity的,这样就无法从context直接转成activity了, 方法二 是可以直接转换的,他的确定就是传递的上下文如果碰到第三方插件需要的...context是没法直接用的,还需要再转化下,还有其他的情况也是无法直接使用的, 2)使用接口来搞定调用底层的方法 这个方法是很安全的一种方法,就是搞起来比较麻烦,代码要写好多,那像上面的方法一句话,强制转换...,各有各的好处, 接口的做法就是先在View里面写上一个接口,然后再写个activity类,实现这个view
前言 掌握View的事件体系是Android 向高级迈向的必经之路,本片博客讲解Android View的相关基础知识第一部分,后面我们会为大家讲解基础知识第二部分、VIew事件体系、View事件分发等知识内容...1.View基础 1.1 什么是View 简单的说View是所有控件的“祖宗”,无论TextView、Button、Linearlayout,还是ListView、RecycleView,他们的基类都是...View 1.2 View 坐标 View坐标是相对于View的父容器来讲的,View看作一个矩形,则View的左上角坐标为(left,top),Vew的右下角的坐标为(right,top),View如果发生改变...,这四个值并不会发生改变,改变的是View的偏移量,坐标系如图1所示。...- getTop(); 在我刚开始接触Android的时候,在我想象中的样子View的坐标为图2 所示,莫名的感觉图2更符合我的思维习惯。
导语 本文主要介绍了Android中Window和View的关系,并在用户进程中说明了View的加载过程,最后再简单认识了一下WMS控制、显示Window的主要步骤。...再往上就是Framework和Application层,可以看到Android的任意View都通过Window间接的被WMS管理。...在Activity中,我们会在onCreate中调用setContentView来写入我们的layout。...root.setView(view, wparams, panelParentView); } 里面核心的一段是调用ViewRoot的setView方法。...4、总结 本文主要介绍了Android中Window和View的关系,并在用户进程中说明了View的加载过程,最后再简单认识了一下WMS控制、显示Window的主要步骤。
先看View的Touch事件分发,我自定义一个View,重写OnTouchEvent函数,然后分别设置OnTouchListener和OnClick: ? ? ?...这时候执行的顺序如下: OnTouchListener.DOWN ->OnTouchListener.MOVE-> OnTouchListener.UP 这里验证了我的猜想,可以得到如下结论 View...通过上面两个结论我们验证了我们的优先级猜想 View的Touch事件分发,执行的优先级为OnTouchListener > onTouchEvent > onClick,如果前两个任意一个地方返回true...接下来我们从源码的角度分析,首先我们需要知道,你点击或者或者触摸任何一个View 都会调用 dispatchTouchEvent()函数,我们就从这里开始分析源码: /** * Pass the...这样View的OnTouch事件分发机制就分析得差不多,具体的判断细节等还是需要自己查看源码。
官网文档地址 第一种 我们可以在AndroidManifest 清单文件里面制定Activity的方向 <activity android:name=".view.main.MainActivity...android:configChanges 常用配置 在Android 3.2以后,如果我们进行下列的配置 ,这样的话横竖屏不会重新创建Activity,但是会调用 onConfigurationChanged...》 横屏 onConfigurationChanged()方法会调用一次 横屏 》 竖屏 onConfigurationChanged()方法也会调用一次 因此我们通常可以进行相应的处理 public...如果我们打开系统的自动旋转屏幕,旋转屏幕,系统不会发生变化,也不会调用 Activity 的 onConfigurationChanged 方法。...当我们手动调用 setRequestedOrientation() 方法去改变屏幕的方向的时候,还是会调用 onConfigurationChanged 方法的 ---- 扩展 设置全屏模式 // 去掉
触摸事件 在用户触摸屏幕时,总是离用户触摸点最近的控件来响应触摸事件,如果最近的控件没有实现响应事件,那这个事件会不断的向父类传递,直到有view响应时,就会将触摸反馈的事件流传递给这个view的onTouchEvent...Android 自定义触摸反馈事件时,通常都是如下的写法: public class MyView { // ......: 一个Listview, Listview中的每一项itme中都有个Button,Button中的实现 重写了onTouchEvent()方法来自定义触摸事件 场景1: 用户点击Button,然后松开手指...结果: 不会触发View滑动,而是Button在移动 这次为什么View中的onInterceptEvent()没有拦截到移动的事件流呢?...这个设置是临时的,也就是只对本次事件流有效。 下次事件流发生时候,如果需要还必须要重新调用一次。 End!
领取专属 10元无门槛券
手把手带您无忧上云