当前位置: 首页 > news >正文

开网站需要投资多少钱长沙建长沙建网站公司

开网站需要投资多少钱,长沙建长沙建网站公司,redis 密码 wordpress,网站建设 技术规范书目录 一、滑动到指定位置#xff08;target position#xff09;并且置顶 1. RecycleView默认的几个实现方法及缺陷 2. 优化源码实现置顶方案 二、调整平移滑动速率 三、其他方案#xff1a;置顶、置顶加偏移、居中 1. 其他置顶方案 2. 置顶加偏移 3. 滚动居中 在实…目录 一、滑动到指定位置target position并且置顶 1. RecycleView默认的几个实现方法及缺陷 2. 优化源码实现置顶方案 二、调整平移滑动速率 三、其他方案置顶、置顶加偏移、居中 1. 其他置顶方案 2. 置顶加偏移 3. 滚动居中 在实际项目里RecycleView 可以说是我们最常用到的组件作为绑定并展示LIST数据的组件经常需要实现平滑滚动到列表里的某个目标ITEM并且将其置顶在屏幕最上方而且在特殊情形下我们需要控制滑动速度来控制滚动的时长。 一、滑动到指定位置target position并且置顶 1. RecycleView默认的几个实现方法及缺陷 ((LinearLayoutManager)recycleView.getLayoutManager()).scrollToPositionWithOffset(int position, int offset); 如果你没有滑动过程动画的要求那上面这行代码将offset的值设置为0就一步到位地满足需求了。 recycleView.scrollToPosition(int position); recycleView.smoothScrollToPosition(int position); 以上两个方法遵循的是最少滑动原则只要target position那项item已经完全可见了就马上停止滑动要是target position已经可见了那根本不会滑动。所以按不同的滑动方向会出现不同的结果如果target position在屏幕可视范围的上方则它默认会将target position置顶反之target position在屏幕可视范围的下方则滚动完成后target postion会处于屏幕的最下方无法实现我们的置顶需求。所以缺陷很明显要么不动要么无法置顶。 2. 优化源码实现置顶方案 我们看下recycleview提供的方法的源代码看看是否可以进行改进 public void smoothScrollToPosition(int position) {if (mLayoutSuppressed) {return;}if (mLayout null) {Log.e(TAG, Cannot smooth scroll without a LayoutManager set. Call setLayoutManager with a non-null argument.);return;}mLayout.smoothScrollToPosition(this, mState, position);} 由代码可以看出RecyclerView的滑动方法是调用LayoutManager的smoothScrollToPosition方法 Overridepublic void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,int position) {LinearSmoothScroller linearSmoothScroller new LinearSmoothScroller(recyclerView.getContext());linearSmoothScroller.setTargetPosition(position);startSmoothScroll(linearSmoothScroller);} 其中LinearSmoothScroller提供了三个滑动策略 /*** Align child views left or top with parent views left or top** see #calculateDtToFit(int, int, int, int, int)* see #calculateDxToMakeVisible(android.view.View, int)* see #calculateDyToMakeVisible(android.view.View, int)*/public static final int SNAP_TO_START -1;/*** Align child views right or bottom with parent views right or bottom** see #calculateDtToFit(int, int, int, int, int)* see #calculateDxToMakeVisible(android.view.View, int)* see #calculateDyToMakeVisible(android.view.View, int)*/public static final int SNAP_TO_END 1;/*** pDecides if the child should be snapped from start or end, depending on where it* currently is in relation to its parent./p* pFor instance, if the view is virtually on the left of RecyclerView, using* {code SNAP_TO_ANY} is the same as using {code SNAP_TO_START}/p** see #calculateDtToFit(int, int, int, int, int)* see #calculateDxToMakeVisible(android.view.View, int)* see #calculateDyToMakeVisible(android.view.View, int)*/public static final int SNAP_TO_ANY 0; LinearSmoothScroller确定滑动方案的方法 /*** When scrolling towards a child view, this method defines whether we should align the top* or the bottom edge of the child with the parent RecyclerView.** return SNAP_TO_START, SNAP_TO_END or SNAP_TO_ANY; depending on the current target vector* see #SNAP_TO_START* see #SNAP_TO_END* see #SNAP_TO_ANY*/protected int getVerticalSnapPreference() {return mTargetVector null || mTargetVector.y 0 ? SNAP_TO_ANY :mTargetVector.y 0 ? SNAP_TO_END : SNAP_TO_START;} 重写LinearSmoothScroller的getVerticalSnapPreference方法 class LinearTopSmoothScroller extends LinearSmoothScroller {public LinearTopSmoothScroller(Context context) {super(context);}Overrideprotected int getVerticalSnapPreference() {return SNAP_TO_START;}} 这里为什么返回 SNAP_TO_START可以看到LinearSmoothScrollerl的方法calculateDtToFit()根据不同滚动策略获取到需要滚动的距离SNAP_TO_START是按置顶的方案来计算的。所以我们在getVerticalSnapPreference方法里固定返回SNAP_TO_START就可以实现目的。 public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, intsnapPreference) {switch (snapPreference) {case SNAP_TO_START:return boxStart - viewStart;case SNAP_TO_END:return boxEnd - viewEnd;case SNAP_TO_ANY:final int dtStart boxStart - viewStart;if (dtStart 0) {return dtStart;}final int dtEnd boxEnd - viewEnd;if (dtEnd 0) {return dtEnd;}break;default:throw new IllegalArgumentException(snap preference should be one of the constants defined in SmoothScroller, starting with SNAP_);}return 0;} 调用方式一 void scrollItemToTop(int position) {LinearSmoothScroller smoothScroller new LinearTopSmoothScroller(this);smoothScroller.setTargetPosition(position);linearLayoutManager.startSmoothScroll(smoothScroller);} 调用方式二 自定义一个类继承自 LinearLayoutManager private class TopLayoutManager extends LinearLayoutManager {public TopLayoutManager(Context context) {super(context);}public TopLayoutManager(Context context, int orientation, boolean reverseLayout) {super(context, orientation, reverseLayout);}Overridepublic void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {RecyclerView.SmoothScroller smoothScroller new LinearTopSmoothScroller(recyclerView.getContext());smoothScroller.setTargetPosition(position);startSmoothScroll(smoothScroller);}private class LinearTopSmoothScroller extends LinearSmoothScroller {public LinearTopSmoothScroller(Context context) {super(context);}Overrideprotected int getVerticalSnapPreference() {return SNAP_TO_START;}} } 调用代码 TopLayoutManager topLayoutManager new TopLayoutManager(this); recycleview.setLayoutManager(topLayoutManager); recycleview.smoothScrollToPosition(position); 二、调整平移滑动速率 同理可以在LinearSmoothScroller类找到决定滚动速度的方法并修改。 /*** Calculates the scroll speed.** param displayMetrics DisplayMetrics to be used for real dimension calculations* return The time (in ms) it should take for each pixel. For instance, if returned value is* 2 ms, it means scrolling 1000 pixels with LinearInterpolation should take 2 seconds.*/protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;} 上面的MILLISECONDS_PER_INCH的值为25F如果希望更快可以将值改小这个方法的返回值表示滚动一个像素需要的时间单位ms如果返回值为2ms表示滚动1000个像素需要花费2秒时长。 平滑滚动到target position【置顶调速】的调用方式 RecyclerView.SmoothScroller smoothScroller new LinearSmoothScroller(this) {Override protected int getVerticalSnapPreference() {return LinearSmoothScroller.SNAP_TO_START;}Overrideprotected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {//默认值是25F(MILLISECONDS_PER_INCH)值越小滑动速度越快,值越大则越慢return 100F / displayMetrics.densityDpi;}};smoothScroller.setTargetPosition(position);linearLayoutManager.startSmoothScroll(smoothScroller); 目前还有一个问题虽然我们可以调整速度但是这里始终是一个固定的滚动速度试想如果滚动的距离特别远仍然需要滚动很长的时间又或者滚动距离太近那么滚动动画一瞬间就结束了缺少了流畅感。 所以我们可以根据需要滚动的远或近来设置不同的滚动速度 RecyclerView.SmoothScroller smoothScroller new LinearSmoothScroller(this) {Override protected int getVerticalSnapPreference() {return LinearSmoothScroller.SNAP_TO_START;}Overrideprotected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {// 第一个可见位置int firstItem linearLayoutManager.findFirstVisibleItemPosition();int diff Math.abs(position - firstItem);// 将 diff 作分母滚动距离越远速度越快。 (100f/diff) 数值如果过小会导致速度过快, 可以再乘一个速度因子变量(speedFactor)来调整int speedFactor 5;float speed (100f / diff) * speedFactor;return speed / displayMetrics.densityDpi;}}; 三、其他方案置顶、置顶加偏移、居中 1. 其他置顶方案 另外一个实现置顶方案可以参考这篇文章Android RecyclerView滚动定位 它主要解决的是滚动到屏幕下面ITEM无法置顶的问题思路是先用scrollToPosition将要置顶的项先移动显示出来然后计算这一项离顶部的距离用scrollBy完成最后的100米 这个方案还有个好处就是如果target position很远滑动距离很长也不会导致屏幕滚动过长的时间。向上向下动态滚动动画过程距离都不超过一个屏幕的距离。 2. 置顶加偏移 另外如果希望置顶后可以有一定的偏移量离顶部有一定距离可以参考这篇文章 RecyclerView的smooth scroller -- 诸多案例 3. 滚动居中 如果希望target position在滚动结束后停留在屏幕中间可以参考下这篇文章 RecyclerView smoothScroll to position in the center. android
http://www.w-s-a.com/news/341997/

相关文章:

  • 有没有那个的网站seo编辑的工作内容
  • 平度那里有做网站的昆明建设招聘信息网站
  • 邯郸城乡建设部网站首页唐山市住房城乡建设部网站主页
  • 慕课联盟网站开发实战六安品牌网站建设电话
  • 制作企业网站首页贵州小程序制作开发
  • 什么是网站后台郑州众志seo
  • 做线上交互的网站分销平台
  • 培训机构网站开发江门cms模板建站
  • 网站描述模板建筑模型网站有哪些
  • 域名注册费用张家界seo
  • 淘宝联盟怎么自己做网站山西省住房与城乡建设厅网站
  • 最新网站建设常见问题使用微信推广的各种方法
  • 购物网站建设课程设计报告做木工的网站
  • 扶沟县网站开发网站建设在哪里进行
  • 查看网站服务器信息网站首页地址 网站域名
  • 网站网站制作网站的ui界面设计案例分析
  • 怎么查网站是否备案成都装修公司联系电话
  • 佛山免费发布信息的网站oa办公系统排行榜
  • 南湖区建设街道办事处网站汕头建设银行各支行电话
  • 复古风格网站网站套餐方案
  • 界面设计做的好的网站旅游商城网站模板
  • 大型电子商务网站 服务器硬件 cpu 内存 硬盘 2014美食网站开发意义
  • 建立网站的目的和意义网站建设寻求
  • 邢台手机网站建设设计师培训心得
  • 营销网站怎么做丽水微信网站建设哪家好
  • 南昌定制网站开发多少钱东阿县城市建设局网站
  • 浙江网站建设公司南昌seo招聘
  • 工业软件有哪些专业seo站长工具全面查询网站
  • 山东兴华建设集团有限公司网站和京东一样做电子产品的网站
  • 网站建设谢辞关于h5的网站模板