android ListView向上滑动隐藏标题,下拉显示标题栏

首先看看效果图,最下边有Demo的下载链接

                


              


 


一、当前的Activity 重写dispatchTouchEvent 方法并且实现AnimationListener接口来达到动画的效果,代码如下:

 private boolean mIsTitleHide = false;
    private boolean mIsAnim = false;
    private float lastX = 0;
    private float lastY = 0;
    @Override
    public boolean dispatchTouchEvent(MotionEvent event)
    {
        super.dispatchTouchEvent(event);
        if (mIsAnim) {
            return false;
        }
        final int action = event.getAction();

        float x = event.getX();
        float y = event.getY();

        switch (action) {
        case MotionEvent.ACTION_DOWN:
            lastY = y;
            lastX = x;
            return false;
        case MotionEvent.ACTION_MOVE:
            float dY = Math.abs(y - lastY);
            float dX = Math.abs(x - lastX);
            boolean down = y > lastY ? true : false;
            lastY = y;
            lastX = x;
            if (dX < 8 && dY > 8 && !mIsTitleHide && !down) {
                Animation anim = AnimationUtils.loadAnimation(
                        BlogListActivity.this, R.anim.push_top_in);
//              anim.setFillAfter(true);
                anim.setAnimationListener(BlogListActivity.this);
                title_content.startAnimation(anim);
            } else if (dX < 8 && dY > 8 && mIsTitleHide && down) {
                Animation anim = AnimationUtils.loadAnimation(
                    BlogListActivity.this, R.anim.push_top_out);
//              anim.setFillAfter(true);
                anim.setAnimationListener(BlogListActivity.this);
                title_content.startAnimation(anim);
            } else {
                return false;
            }
            mIsTitleHide = !mIsTitleHide;
            mIsAnim = true;
            break;
        default:
            return false;
        }
        return false;
    }

二、重写AnimationListener方法

	@Override
	public void onAnimationEnd(Animation animation) {
		// TODO Auto-generated method stub
		if (mIsTitleHide) {
			title.setVisibility(View.GONE);
		} else {

		}
		mIsAnim = false;
	}

	@Override
	public void onAnimationRepeat(Animation animation) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onAnimationStart(Animation animation) {
		// TODO Auto-generated method stub
		title.setVisibility(View.VISIBLE);
		if (mIsTitleHide) {
			FrameLayout.LayoutParams lp = (LayoutParams) mlinear_listview
					.getLayoutParams();
			lp.setMargins(0, 0, 0, 0);
			mlinear_listview.setLayoutParams(lp);
		} else {
			FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) title
					.getLayoutParams();
			lp.setMargins(0, 0, 0, 0);
			title.setLayoutParams(lp);
			FrameLayout.LayoutParams lp1 = (LayoutParams) mlinear_listview
					.getLayoutParams();
			lp1.setMargins(0,
					getResources().getDimensionPixelSize(R.dimen.title_height),
					0, 0);
			mlinear_listview.setLayoutParams(lp1);
		}
	}


动画 push_top_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="300"
        android:fromYDelta="0"
        android:toYDelta="-100%"
        android:fillBefore="true"  />

</set>

动画 push_top_out.xml
<pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="300"
        android:fillBefore="true"
        android:fromYDelta="-100%"
        android:toYDelta="0" />

</set>


以上代码就可以实现具体的功能了。


Demo下载地址:http://download.csdn.net/detail/tuibiansoar/8153269

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值