android开发仿ios的UIScrollView实例代码

作者:马云飞的博客 时间:2023-08-07 01:55:20 

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

好了,说正事,对于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就诞生了。其实我感觉这个实用性不是很大,看个人需求了。其实也是蛮好玩的~

来源:http://blog.csdn.net/sw950729/article/details/52050777

标签:android,仿ios,UIScrollView
0
投稿

猜你喜欢

  • 如何使用Jenkins构建GIT+Maven项目

    2021-11-18 04:42:52
  • 详解SpringBoot项目整合Vue做一个完整的用户注册功能

    2022-02-13 21:46:35
  • Java的关键字与保留字小结

    2021-05-30 10:20:50
  • Java桶排序之基数排序详解

    2021-08-26 13:38:58
  • 浅析Java的Hibernate框架中的缓存和延迟加载机制

    2023-04-12 15:58:00
  • Flutter刷新组件RefreshIndicator自定义样式demo

    2023-07-06 15:56:45
  • 详解C# partial 关键字的使用

    2023-06-07 20:46:09
  • C++ 让函数返回数组的方法

    2022-12-04 06:49:33
  • Java设计模式之工厂模式实现方法详解

    2023-11-26 07:55:51
  • C# 定时器定时更新的简单实例

    2023-01-08 12:45:50
  • Android实现信息弹出框

    2023-04-20 06:27:40
  • C# Winform 调用系统接口操作 INI 配置文件的代码

    2023-03-04 11:49:54
  • 解决使用RestTemplate时报错RestClientException的问题

    2023-05-27 19:46:36
  • java实现PPT转化为PDF

    2021-06-17 05:02:24
  • spring-cloud-stream结合kafka使用详解

    2022-05-19 14:32:50
  • Java如何自定义异常打印非堆栈信息详解

    2022-05-06 09:43:36
  • c++换行符知识点总结

    2022-10-05 13:53:01
  • DevExpress之ChartControl实现柱状图演示实例

    2023-05-27 08:45:15
  • Android实现控制摄像头拍照

    2022-06-03 02:14:06
  • Java数组的扩容代码示例

    2021-10-10 00:04:21
  • asp之家 软件编程 m.aspxhome.com