Android弹性滑动效果实现与ListView定制
在Android开发中,实现弹性滑动效果是一种常见的用户体验优化技巧,它允许用户在滚动列表时感受到更流畅、更具互动性的操作。本篇内容将详细介绍如何在自定义的`MyListView`组件中集成弹性滑动功能,以增强ListView的触摸体验。 首先,我们需要创建一个继承自`ListView`的自定义视图类`MyListView`,这个类会在Android 2.2及以上版本中使用。为了实现实现边界弹性滑动,我们需要关注以下几个关键部分: 1. **初始化与构造方法**: - `MyListView(Context context)` 和 `MyListView(Context context, AttributeSet attrs)` 构造函数中,除了调用父类的构造函数外,还创建了一个`GestureDetector`对象来检测用户的触摸手势。这有助于识别并响应用户的滑动行为。 - `GestureDetector gestureDetector = new GestureDetector(new OnGestureListener() {...})`:这里创建了一个`OnGestureListener`接口的实例,用于监听用户的滑动动作,如长按、滑动等。 2. **事件处理**: - 使用`OnGestureListener`的回调方法,如`onTouchEvent(MotionEvent event)`,当用户在ListView上进行触摸操作时,这些方法会被调用。在这里,我们可以根据接收到的MotionEvent类型判断是开始滑动(ACTION_DOWN)、滑动中(ACTION_MOVE)还是结束滑动(ACTION_UP)。 - 当检测到用户滑出屏幕边界(ACTION_OUTSIDE)时,我们需要记录下初始滑出位置(firstOut)和滑动距离(distance),并设置标志`outBound`为true,以便后续处理。 3. **边界弹性处理**: - 当`outBound`标志为true且滑动距离超过预设值时,执行弹性滑动动画。这通常通过创建`TranslateAnimation`对象实现,调整视图的位置,使其在滑回边界区域时逐渐减速并停止,提供平滑的回弹效果。 - 可能会使用`Rect`类来计算屏幕边界,并根据用户滑出的方向(水平或垂直)应用不同的动画方向和距离。 4. **生命周期管理**: - 在`IN1`、`IN2`和`IN3`的`d(TAG)`日志输出表明,这些方法在ListView创建、设置属性或初始化时被调用,用于初始化日志记录以及确保正确传递上下文。 总结起来,实现Android中的弹性滑动效果,主要涉及自定义视图的创建、事件监听和处理、以及动画的运用。通过这些步骤,开发者可以为ListView添加更丰富的交互性,提升用户界面的可用性和吸引力。需要注意的是,实际开发中可能还需要根据项目需求对代码进行相应的调整和优化,例如处理多种滑动模式,或者加入更复杂的动画效果。
您需要 登录 才可以下载或查看,没有帐号?免费加入
x 弹性滑动的效果比较好看.但是 在2.2以下版本中,android 本身没有实现,想要实现这中效果要自己去写
前几天在iteye上看见了一个博客给我很大的启示,于是自己动手实验了一下感觉还可以.在这里把我的源码给大家贴上让大家一起分享,希望大家也能提出更好的意见.废话不多说上源码:
1.自己些一个MyListview 继承listview 类:
[mw_shl_code=java,true] package com.wljie;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.animation.TranslateAnimation;
import android.widget.ListView;
public class MyListView extends ListView {
private Context context;
private boolean outBound = false;
private int distance;
private int firstOut;
private static final String TAG = "wljie";
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
Log.d(TAG, "IN 1");
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
Log.d(TAG, "IN 2");
}
public MyListView(Context context) {
super(context);
this.context = context;
Log.d(TAG, "IN 3");
}
GestureDetector gestureDetector = new GestureDetector(
new OnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
/**
* 手势滑动的时候触发
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
Log.d(TAG, "ENTER onscroll");
int firstPos = getFirstVisiblePosition();
int lastPos = getLastVisiblePosition();
int itemCount = getCount();
// outbound Top
剩余10页未读,继续阅读
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展