热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

android开发仿ios的UIScrollView实例代码

下面小编就为大家分享一篇android开发仿ios的UIScrollView实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

今天重新装了编译器,结果崩无极限,真是日了狗了了。刚刚才知道问题在哪边。

好了,说正事,对于ios开发我没接触,不是很了解,百度了半天,差不多就是UIScrollView的把。如果不对,请指证。具体什么效果呢,我刚才拿朋友的iphone手机看了下,iphone的设置界面,第一个列表往下拉可以继续滚,上拉同理。不过android好像没有自带的这种情况。

我把这种效果称为滚无极限的scollview。

下面就来上源码:

首先,最最最重要的就是判断当前视图是否为空,你空视图滚不滚好像没啥区别,除了android 5.0的scrollview自带了那种弧度。好像没什么软用~~~

//视图不为空即可滚动
  protected void onFinishInflate() {
    if (getChildCount() > 0) {
      childview = getChildAt(0);
    }
  }

这个属性我也是刚知道没多久,意思是当所有的布局呈现完成之后调用这个方法。

我这边附上view常用的方法,你们可以自行研究,有好多方法我也不知道~~~.

自定义 View的常用方法:  

onFinishInflate() 当View中所有的子控件 均被映射成xml后触发   

onMeasure(int, int) 确定所有子元素的大小   

onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发   

onSizeChanged(int, int, int, int) 当view的大小发生变化时触发

onDraw(Canvas) view渲染内容的细节

onKeyDown(int, KeyEvent) 有按键按下后触发

onKeyUp(int, KeyEvent) 有按键按下后弹起时触发  

onTrackballEvent(MotionEvent) 轨迹球事件

onTouchEvent(MotionEvent)触屏事件

onFocusChanged(boolean, int, Rect) 当View获取 或失去焦点时触发

onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发

onAttachedToWindow() 当view被附着到一个窗口时触发

onDetachedFromWindow() 当view离开附着的窗口时触发,提示该方法和 onAttachedToWindow() 是相反的。   

onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发

以上是View实现的一些基本接口的回调方法,一般我们需要处理画布的显示时,重写onDraw(Canvas)用的的是最多的。

接下来就是ontouch事件来判断位移和回弹的效果啦:

if (childview != null) {
      int action = event.getAction();
      switch (action) {
        case MotionEvent.ACTION_DOWN:
          break;
        case MotionEvent.ACTION_UP:
          //判断是否需要动画
          if (!normal.isEmpty()) {
            animation();
            isCount = false;
          }
          break;
        case MotionEvent.ACTION_MOVE:
          final float DownY = startY;
          float moveY = event.getY();
          int distance = (int) (DownY - moveY);
          if (!isCount) {
            distance = 0; // 在这里要归0.
          }
          startY = moveY;
          if (isNeedMove()) {
            //顶部
            if (normal.isEmpty()) {
              normal.set(childview.getLeft(), childview.getTop(),
                  childview.getRight(), childview.getBottom());
            }
            //底部
            childview.layout(childview.getLeft(), childview.getTop() - distance / 2,
                childview.getRight(), childview.getBottom() - distance / 2);
          }
          isCount = true;
          break;
      }

后面就是判断是否需要滚动和回弹的动画效果了。

 public void animation() {
    // 开启移动动画
    TranslateAnimation animation = new TranslateAnimation(0, 0, childview.getTop(),
        normal.top);
    animation.setDuration(200);
    childview.startAnimation(animation);
    // 设置回到正常的布局位置
    childview.layout(normal.left, normal.top, normal.right, normal.bottom);
    normal.setEmpty();
  }
 public boolean isNeedMove() {
    int offset = childview.getHeight() - getHeight();
    int scrollY = getScrollY();
    // 0是顶部,后面那个是底部
    if (scrollY == 0 || scrollY == offset) {
      return true;
    }
    return false;
  }

好了,一个滚,滚,滚,滚无极限的scrollview就诞生了。其实我感觉这个实用性不是很大,看个人需求了。其实也是蛮好玩的~

以上这篇android开发仿ios的UIScrollView实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 本文将带您了解Cocos家族的不同版本和分支,特别是Cocos Creator的发展历程及其核心特性,帮助初学者快速入门。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • TCP长连接设备管理平台:架构与功能概览
    本文介绍了基于TCP长连接的设备管理平台的设计理念、技术选型及主要功能模块。最初,项目旨在实现简单的协议测试,但随着需求扩展,逐步演变为一个完整的前后端分离系统。 ... [详细]
  • 本文探讨了在UC浏览器中调用分享面板后,图片无法正常显示的问题,并提供了详细的解决方法和代码示例。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 非授权维修导致iPhone 8屏幕失灵:苹果新固件策略解析
    设备制造商通常希望用户通过官方或授权服务中心进行维修,以确保质量并保障收入。然而,对于消费者而言,价格更低、服务更便捷的非授权维修商更具吸引力。本文将探讨使用非授权服务商更换iPhone 8屏幕可能带来的问题及其背后的技术原因。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
  • 本文介绍了如何在Xcode中通过自定义文件模板来添加个性化的注释,以提高代码的可读性和维护性。具体步骤包括打开Xcode的应用包,定位到文件模板目录,并对相关文件进行编辑。 ... [详细]
  • 本文探讨了在iOS项目中导入MKNetworkKit库时遇到的常见问题及其解决方案。 ... [详细]
  • 使用Swift 2.2创建我的第一个Xcode应用
    本文将指导您如何使用Xcode 6搭建并运行一个简单的iOS应用程序。从启动Xcode到执行首个应用,每个步骤都将详细介绍。 ... [详细]
author-avatar
傻傻的笑没心没肺wy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有