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


猜你喜欢
- 工作需要,经常需要实现api接口,但每次都是大同小异,我就考虑是否可以将这种重复性的工作配置化。我就写一个模板api,然后所有的HTTP请求
- 项目地址:gitee.com/baojh123/rp…netty-study 这个项目是没用到的,可以删掉,主要是测试
- 1、什么是keyWidget中有个可选属性key,顾名思义,它是组件的标识符,当设置了key,组件更新时会根据新老组件的key是否相等来进行
- 对变量延迟初始化Kotlin语言有许多特性,包括变量不可变,变量不可为空,等等。这些特性都是为了尽可能地保证程序安全而设计的,但是有些时候这
- 需要添加引用,System.Configuration;写系统配置文件: Configuration cfa =
- 本文实例讲述了C#简单实现防止多个程序运行的方法。分享给大家供大家参考,具体如下:/// <summary>/// 应用程序的主
- 本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下此次扫雷中我们以9乘以9的表格为例,后期可自动调动主要思路:建立两
- 简介工厂方法模式是什么?为什么要有工厂方法模式,不是有了简单工厂模式了吗?两个模式都有工厂,那有什么不同呢?功工厂方式模式是怎样实现的?OK
- 发现问题:之前用springAOP做了个操作日志记录,这次在往其他类上使用的时候,service一直注入失败,找了网上好多内容,发现大家都有
- 本文实例讲述了C++实现的链表类。分享给大家供大家参考。具体如下:#include <iostream>using namesp
- 本文实例讲述了Android编程实现震动与振铃的方法。分享给大家供大家参考,具体如下:1、Android的震动实现——Vibrator类(1
- step1. 导包(导入要使用的标签的jar文件)。step2. 使用taglib指令引入要使用的标签。taglib指令: &nb
- JPA的加锁机制有两种,乐观锁和悲观锁。乐观锁:乐观锁的特点在于认为数据冲突或者更新丢失等情况是很少发生的.当发生的时候,抛出异常和回滚就足
- 日期、数字格式化显示,是web开发中的常见需求,spring mvc采用XXXFormatter来处理,先看一个最基本的单元测试:packa
- 1、前言 最近做项目需要用到监测网速及流量,我经过百度和墙内谷歌都没能快速发现监测IPV6流量和网速的用例;也经过自己的一番查询和调试,浪
- 这一节我们将探索选择器(selectors)。选择器提供选择执行已经就绪的任务的能力,这使得多元 I/O 成为可能。就像在第一章中描述的那样
- yml 文件规则yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的。不支持tab缩进可以使用 "-
- 本文介绍一些Java初学者常问的问题,可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需
- 前言springboot提供了 spirng-boot-starter-test 以供开发者使用单元测试,在引入 spring-boot-s
- 1.新建springBoot项目在前面有两种方式2.加入thymeleaf模板引擎SpringBoot推荐使用thymeleaf模板引擎语法