`

listview 反弹

    博客分类:
  • view
阅读更多


package com.rebound.myscroll;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ListView;
import android.widget.ScrollView;

/**
 * MyListView 
 * 
 */
public class MyListView extends ListView
{
    private View inner;

    private float y;

    private Rect normal = new Rect();;

    public MyListView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
       // this.smoothScrollTo(0, 0);
        this.scrollTo(0, 0);

    }

    @Override
    protected void onFinishInflate()
    {
       // if (getChildCount() > 0)
        //{
          //  inner = getChildAt(0);

        //}
     inner=this;
     System.out.println("inner//"+inner.toString());
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev)
    {
        if (inner == null)
        {
            return super.onTouchEvent(ev);
        }
        else
        {
            commOnTouchEvent(ev);
        }

        return super.onTouchEvent(ev);
    }

    public void commOnTouchEvent(MotionEvent ev)
    {
        int action = ev.getAction();
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                y = ev.getY();
                break;
            case MotionEvent.ACTION_UP:

                if (isNeedAnimation())
                {
                    animation();
                }

                break;
            case MotionEvent.ACTION_MOVE:
                final float preY = y;
                float nowY = ev.getY();
                int deltaY = (int) (preY - nowY);
                System.out.println("移动的距离::///"+deltaY);
                // 下面的要注释掉,不然view会闪第一次,误用
//                scrollBy(0, deltaY);
                //scrollTo(0, deltaY);

                y = nowY;
                // 是否要改变位置
                if (isNeedMove())
                {
                    int left = inner.getLeft();
     int top = inner.getTop();
     int right = inner.getRight();
     int bottom = inner.getBottom();
     if (normal.isEmpty())
                    {
                        // 保存listview左上角这个坐标的位置,移动完后好回归原点
                        normal.set(left, top, right, bottom);
                        System.out.println("inner.getLeft()/inner.getTop()/inner.getRight()/inner.getBottom()"+left+"   "+top+"  "+right+" "+bottom);
                    }
                    // 改变listview的位置
                    inner.layout(left, top - deltaY, right, bottom - deltaY);
                }
                break;

            default:
                break;
        }
    }

    // 动画

    public void animation()
    {
        // 动画
        TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(), normal.top);
        ta.setDuration(200);
        inner.startAnimation(ta);
        // 回归最初位置
        inner.layout(normal.left, normal.top, normal.right, normal.bottom);

        normal.setEmpty();

    }

    // 看normal有没有保存listview的位置
    public boolean isNeedAnimation()
    {
        return !normal.isEmpty();
    }

    // 是否符合反弹的条件
    public boolean isNeedMove()
    {

      
          if (getFirstVisiblePosition()==0 || getLastVisiblePosition()==getAdapter().getCount()-1)
        {
         System.out.println("NeedMove");
            return true;
        }
        System.out.println("not   NeedMove");
        return false;
    }

}

1
0
分享到:
评论

相关推荐

    Android ListView反弹效果源码.rar

    "Android ListView反弹效果源码" 是一个针对ListView进行优化的资源包,它提供了实现ListView滚动反弹效果的代码。这个源码可能包括自定义滚动监听器、动画处理和视图处理等关键组件,旨在让ListView在滚动至顶部或...

    AndroidListView反弹效果源码.zip

    在这个名为"AndroidListView反弹效果源码.zip"的压缩包中,包含了实现这一效果的源代码。这种效果的实现主要涉及到以下几个关键点: 1. **OverScroller**:这是Android系统提供的一个类,用于处理过度滚动动画。它...

    Android ListView反弹效果源码

    本篇将详细解析实现Android ListView反弹效果的源码。 首先,反弹效果主要依赖于两个关键组件:OnScrollListener和 OverscrollByCompat 方法。OnScrollListener 是ListView的监听器,用来捕获用户的滚动事件;...

    Android ListView反弹效果源码.zip

    本压缩包中的"Android ListView反弹效果源码.zip"提供了实现这一功能的源代码参考。 首先,我们来看"源码说明.txt"文件,它可能包含了对源码的详细解释和使用指南。通常,开发者会在这里介绍实现反弹效果的关键类、...

    listview反弹实现详解

    ListView是Android系统中常见的一种用于展示大量数据的控件,尤其在早期的Android应用...以上就是关于ListView反弹效果的实现详解,通过这些步骤,你可以为你的Android应用增加一种吸引人的交互元素,提升用户体验。

    小程序源码 辅助类库 ListView反弹效果源码.rar

    这个压缩包“小程序源码 辅助类库 ListView反弹效果源码.rar”似乎包含了实现ListView在滚动到顶部或底部时产生弹性反弹效果的源代码。这种效果常见于许多现代应用程序,它为用户提供了更加直观和动态的交互体验。 ...

    安卓Android源码——ListView反弹效果源码.zip

    这个压缩包文件“安卓Android源码——ListView反弹效果源码.zip”显然包含了实现ListView滚动到顶部或底部时的反弹效果的源代码。这种反弹效果,也被称为“橡皮筋效果”,常见于iOS系统中,给用户带来更自然、流畅的...

    Android源码——ListView反弹效果源码_new_10.zip

    这个压缩包"Android源码——ListView反弹效果源码_new_10.zip"显然包含了一个实现ListView反弹效果的源代码示例。反弹效果(Pull to Refresh)是用户下拉ListView时,头部会有一个回弹动画,通常用于刷新列表数据。...

    Android源码——ListView反弹效果源码_new_10.7z

    本压缩包文件"Android源码——ListView反弹效果源码_new_10.7z"提供了实现这一功能的源代码,下面将详细介绍这个反弹效果的实现原理和技术要点。 首先,ListView的反弹效果主要通过重写OnScrollListener和...

    Android ListView反弹效果源码.zip源码资源下载

    本资源“Android ListView反弹效果源码.zip”就是提供了实现这种效果的源代码。 首先,我们要理解反弹效果的实现原理。通常,这种效果是通过自定义ListView的滚动监听器,结合物理学中的动量守恒定律来模拟的。在...

    Android ListView反弹效果源码-IT计算机-毕业设计.zip

    这个“Android ListView反弹效果源码”项目,很显然,是为学生提供的一种学习资源,帮助他们理解和实现ListView在滚动到底部或顶部时的“反弹”效果,这种效果在许多应用中常见,如聊天应用、新闻应用等,它给用户...

    listview反弹

    android listview反弹效果(动态调整listview页脚页眉) 和上拉刷新效果通过隐藏或显示 headview 和footerview 来实现反弹,刷新!

    Android ListView反弹效果源码.zip项目安卓应用源码下载

    Android ListView反弹效果源码.zip项目安卓应用源码下载Android ListView反弹效果源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

    ListView反弹效果实现

    ListView的反弹效果,也称为回弹或Over Scroll效果,是指用户在滑动到ListView的顶部或底部时,继续滑动,ListView会有一个自然回弹的效果,使得用户体验更加流畅和自然。本篇文章将深入探讨如何在Android中实现...

    listview反弹效果

    "ScrollViewRebound"这个文件可能包含了实现ListView反弹效果的代码示例。通常,这种效果是通过自定义ListView或者在其基础上扩展来实现的,主要涉及到以下几个关键知识点: 1. ** OverscrollBy 方法**:这是...

    仿微信查看图片效果以及listview反弹效果

    1.listview的动画反弹效果 2.点击图片全屏查看图片,可对图片进行双指放大缩小移动,点击屏幕图片消失,点击返回图片消失,弹出和消失时都有简单动画。

Global site tag (gtag.js) - Google Analytics