android listview 的弹性滑动 简单demo 实现
来源:互联网 发布:macbook安装软件 编辑:程序博客网 时间:2024/06/05 10:27
弹性滑动的效果比较好看。但是 在2.2以下版本中,android 本身没有实现,想要实现这中效果要自己去写
前几天在iteye上看见了一个博客给我很大的启示,于是自己动手实验了一下感觉还可以。在这里把我的源码给大家贴上让大家一起分享,希望大家也能提出更好的意见。废话不多说上源码:
1.自己些一个MyListview 继承listview 类:
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);this.context = context;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() {@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}/*** 手势滑动的时候触发*/@Overridepublic 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 Topif (outBound && firstPos != 0 && lastPos != (itemCount - 1)) {scrollTo(0, 0);return false;}View firstView = getChildAt(firstPos);if (!outBound)firstOut = (int) e2.getRawY();if (firstView != null&& (outBound || (firstPos == 0&& firstView.getTop() == 0 && distanceY < 0))) {// Record the length of each slidedistance = firstOut - (int) e2.getRawY();scrollTo(0, distance / 2);return true;}// outbound Bottomreturn false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn false;}});@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {Log.d(TAG, "dispatchTouchEvent");int act = event.getAction();if ((act == MotionEvent.ACTION_UP || act == MotionEvent.ACTION_CANCEL)&& outBound) {outBound = false;// scroll back}if (!gestureDetector.onTouchEvent(event)) {outBound = false;} else {outBound = true;}Rect rect = new Rect(); getLocalVisibleRect(rect); TranslateAnimation am = new TranslateAnimation( 0, 0, -rect.top, 0); am.setDuration(300); startAnimation(am); scrollTo(0, 0);return super.dispatchTouchEvent(event);}}
2.在main.xml 中写入
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" > <com.wljie.MyListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/MyListView"/></LinearLayout>
3.创建一个my_listitem.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_height="wrap_content" android:id="@+id/MyListItem" android:paddingBottom="3dip" android:paddingLeft="10dip"> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/ItemTitle" android:textSize="30dip"> </TextView> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/ItemText"> </TextView></LinearLayout>
4.在Main.java中进行下一步的显示
package com.wljie; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.graphics.Rect; import android.os.Bundle; import android.view.animation.TranslateAnimation; import android.widget.SimpleAdapter; public class Main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 绑定XML中的ListView,作为Item的容器 MyListView list = (MyListView) findViewById(R.id.MyListView); // 生成动态数组,并且转载数据 ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); for (int i = 0; i < 30; i++) { HashMap<String, String> map = new HashMap<String, String>(); map.put("ItemTitle", "This is Title....."); map.put("ItemText", "This is text....."); mylist.add(map); } // 生成适配器,数组===》ListItem SimpleAdapter mSchedule = new SimpleAdapter(this, // 没什么解释 mylist,// 数据来源 R.layout.my_listitem,// ListItem的XML实现 // 动态数组与ListItem对应的子项 new String[] { "ItemTitle", "ItemText" }, // ListItem的XML文件里面的两个TextView ID new int[] { R.id.ItemTitle, R.id.ItemText }); // 添加并且显示 list.setAdapter(mSchedule); } }
- android listview 的弹性滑动 简单demo 实现
- android listview 的弹性滑动 简单demo 实现
- android listview 的弹性滑动
- android 中listview滑动加载的简单demo
- Android ListView 弹性滚动简单实现
- Android 实现ListView的弹性效果
- Android中实现ListView的弹性效果
- Android 实现ListView的弹性效果
- Android ListView上下滑动弹性动画
- Android Scroll实现弹性滑动 一 列表下拉弹性滑动
- Android Scroll实现弹性滑动 二 随手弹性滑动
- 实现ListView的弹性滚动
- Android:如何实现例如iOS的listview 的弹性效果
- android 自定义弹性的ListView
- android使用延时策略实现弹性滑动
- 可滑动控件(ListView,WebView,ScrollView)实现弹性滑动或者取消弹性滑动(上下或左右滑动)
- android ListView滑动到顶部带弹性效果
- Android上实现仿IOS弹性ListView
- fedora 解压rar文件
- JavaScript
- hdu 1760 一道搜索博弈题 挺新颖的题目
- QT中的复选框改变大小,并改为打勾
- boost库在工作(24)任务之四
- android listview 的弹性滑动 简单demo 实现
- Android Gallery3D效果 教程 案例 代码
- android-轻松监听来电和去电
- Android listView 总是显示最后一项
- android项目源码异步加载远程图片的小例子
- java设计模式---适配器模式
- Android上传文件到服务器中的简单实例
- Android游戏开发系统控件-CheckBox
- 基于ListView和CheckBox实现多选和全选记录的功能