android listview仿iphone特效(下拉(下冲)或底部往上拉(上冲)有一个弹性回退)

简介:

http://hemowolf.iteye.com/blog/1181065

 ios常见视图在顶部往下拉(下冲)或底部往上拉(上冲)有一个弹性回退的动画效果。著名的CM ROM和一些手机厂商也争相集成这种效果。android 从2.3开始实现了下冲到底部和上冲到顶部时颜色渐变动画效果。这种在iphone中经典的特效在一定程度上满足了android迷们追逐体验的需求。下面我们来探讨实现这种效果的思路和实现锥形。

  view类有两个很重要的方法scrollTo和scrollBy,允许移动视图的可见区域。这就是我们今天实现动画效果的理论基础,我们可以在android数据列表顶部往下拖动列表或底部往上拖动列表时相应的移动数据列表,当停止拖动时再让它弹回去。那么怎么才能知道在顶端和底部呢?请查阅ListView的相关资料。具体的原理讲完了上代码。

 

Java代码   收藏代码
  1. package com.droidwolf;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.view.MotionEvent;  
  6. import android.widget.ListView;  
  7. //by droidwolf 转载请注明  
  8. public class IpListView extends ListView implements Runnable {  
  9.     private float mLastDownY = 0f;  
  10.     private int mDistance = 0;  
  11.     private int mStep = 10;  
  12.     private boolean mPositive = false;  
  13.   
  14.     public IpListView(Context context, AttributeSet attrs) {  
  15.     super(context, attrs);  
  16.     }  
  17.   
  18.     public IpListView(Context context, AttributeSet attrs, int defStyle) {  
  19.     super(context, attrs, defStyle);  
  20.     }  
  21.   
  22.     public IpListView(Context context) {  
  23.     super(context);  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean onTouchEvent(MotionEvent event) {  
  28.     switch (event.getAction()) {  
  29.     case MotionEvent.ACTION_DOWN:  
  30.         if (mLastDownY == 0f && mDistance == 0) {  
  31.         mLastDownY = event.getY();  
  32.         return true;  
  33.         }  
  34.         break;  
  35.   
  36.     case MotionEvent.ACTION_CANCEL:  
  37.     case MotionEvent.ACTION_UP:  
  38.         if (mDistance != 0) {  
  39.         mStep = 1;  
  40.         mPositive = mDistance >= 0;  
  41.         this.post(this);  
  42.         return true;  
  43.         }  
  44.   
  45.         mLastDownY = 0f;  
  46.         mDistance = 0;  
  47.         break;  
  48.   
  49.     case MotionEvent.ACTION_MOVE:  
  50.         if (mLastDownY != 0f) {  
  51.         mDistance = (int) (mLastDownY - event.getY());  
  52.         if ((mDistance < 0 && getFirstVisiblePosition() == 0 && getChildAt(0).getTop() == 0)  
  53.             || (mDistance > 0 && getLastVisiblePosition() == getCount() - 1)) {  
  54.             mDistance /= 2;  
  55.             scrollTo(0, mDistance);  
  56.             return true;  
  57.         }  
  58.         }  
  59.         mDistance = 0;  
  60.         break;  
  61.     }  
  62.     return super.onTouchEvent(event);  
  63.     }  
  64.   
  65.     @Override  
  66.     public void run() {  
  67.     mDistance += mDistance > 0 ? -mStep : mStep;  
  68.     scrollTo(0, mDistance);  
  69.     if ((mPositive && mDistance <= 0) || (!mPositive && mDistance >= 0)) {  
  70.         scrollTo(00);  
  71.         mDistance = 0;  
  72.         mLastDownY = 0f;  
  73.         return;  
  74.     }  
  75.     mStep += 1;  
  76.     this.postDelayed(this10);  
  77.     }  
  78. }// end class  

 

IpListView实现的动画只是简单的回退效果,也没有实现上冲和下冲特效,具体实现留给您去完善吧~~

 


相关文章
|
8月前
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
107 2
|
7月前
|
前端开发 Android开发 Windows
27. 【Android教程】下拉选择框 Spinner
27. 【Android教程】下拉选择框 Spinner
264 2
|
7月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
88 2
|
7月前
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
268 2
|
8月前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
82 2
|
8月前
|
XML 编解码 Java
Android控件之高级控件——ListView、cardView、屏幕适配
Android控件之高级控件——ListView、cardView、屏幕适配
|
Java Android开发 JavaScript
Android弹性反弹:Facebook Rebound
Android弹性反弹:Facebook Rebound Android平台上的Facebook Rebound是一种交互体验设计,其主要内容是实现一个Android view在用户触发时候,自然的做出一种交互响应:以一种自然、顺滑的方式做阻尼震动(震动也是一一种平滑方式而非锯齿状的剧烈抖动)。
802 0
|
3天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
1月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
65 19
|
1月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
70 14

热门文章

最新文章