自动显示与隐藏布局的ListView

原创 2016年05月30日 11:29:21

效果图

这里写图片描述

代码

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    String[] datas = {"A","A","A","A","A","A","A","A","A","A",
            "A","A","A","A","A","A","A","A","A","A","A","A","A",};
    private int scaledTouchSlop;
    private float firstY = 0;
    private Toolbar toolbar;
    private ObjectAnimator animtor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        listView = (ListView) findViewById(R.id.listview);
        //设置空的布局
        initHeadView();//添加headvier要在setAdapter之前
        listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,datas));
        //判断认为是滑动的最小距离
        scaledTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
        listView.setOnTouchListener(new View.OnTouchListener() {
            private float currentY;
            private int direction;
            private boolean mShow = true;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        firstY = event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        currentY = event.getY();
                        if(currentY - firstY >scaledTouchSlop){
                            direction = 0;//向下
                        }else if(firstY - currentY > scaledTouchSlop){
                            direction = 1;//向上
                        }
                        if(direction == 1){
                            if(mShow){
                                toobarAnim(1);
                                mShow = !mShow;
                            }
                        }else if(direction == 0){
                            if(!mShow){
                                toobarAnim(0);
                                mShow = !mShow;
                            }
                        }
                        break;
                    case MotionEvent.ACTION_UP:
                        break;
                }
                return false;//注意此处不能返回true,因为如果返回true,onTouchEvent就无法执行,导致的后果是ListView无法滑动
            }
        });
    }

    /**
     * 设置头布局,注意:这个头布局的高度要和ToolBar的高度一致
     */
    public void initHeadView(){
        View view = new View(this);
        AbsListView.LayoutParams params = new AbsListView.LayoutParams
                (AbsListView.LayoutParams.MATCH_PARENT,
                        (int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material));
        view.setLayoutParams(params);
        listView.addHeaderView(view);
    }

    public void toobarAnim(int direction){
        //开始新的动画之前要先取消以前的动画
        if(animtor!=null&&animtor.isRunning()){
            animtor.cancel();
        }
        if(direction == 0){//手指向下滑动,显示ToolBar
            //toolbar.getTranslationY()获取的是Toolbar距离自己顶部的距离
            animtor = ObjectAnimator.ofFloat(toolbar, "translationY", toolbar.getTranslationY(), 0);
        }else if( direction == 1){
            animtor = ObjectAnimator.ofFloat(toolbar, "translationY", toolbar.getTranslationY(), -toolbar.getHeight());
        }
        animtor.start();
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

ListView中headerview的动态显示和隐藏的问题

ListView中headerview的动态显示和隐藏的问题Android1.动态设置headerview的方法动态设置headerview有两个思路。方法一将header的布局写在list item...
  • teagreen_red
  • teagreen_red
  • 2017年07月05日 16:21
  • 663

ListView如何动态显示与隐藏headerview,footerview

前言很多情况我们需要用到ListView的addHeaderView(View v)以及addFooterView(View v)以满足我们的需求。比如我们项目中的情况:ListView上面需要显示一...
  • dreamsever
  • dreamsever
  • 2016年08月26日 14:48
  • 1717

ListView子项item的显示与隐藏

1. 在getView方法中写入:     //记录当前展开项的索引       private int expandPosition = -1;  QueryOrderResul...
  • fenghong_123
  • fenghong_123
  • 2016年10月27日 11:21
  • 1311

自动显示和隐藏头布局的ListView原来是那么简单

尊重原创,转载请注明:From zsml2016(http://blog.csdn.net/qq_29269233)Power byzsml2016侵权必究! 前言: 今天在看Android进阶的书籍...
  • qq_29269233
  • qq_29269233
  • 2016年12月14日 22:45
  • 1685

Android 自动显示与隐藏布局的 ListView

下面这个效果是,向下滑动 ListView ,其顶部布局自动显示;向上滑动 ListView ,其顶部的布局自动隐藏。效果如下:        首先这个效果的实现大致需要如下几步...
  • antimage08
  • antimage08
  • 2016年03月24日 21:53
  • 1699

android 动态显示隐藏listview的headerview和headerview里的控件

需求:根据某种需要,可能需要动态调整listview的页眉页脚,譬如将header作为显示板使用。 难点:listView.addHeaderView()方法必须在setAdapter()方法前调用,...
  • ethan_xue
  • ethan_xue
  • 2013年08月09日 11:52
  • 20175

实现ListView的条目下自动隐藏显示的布局

这个想法是我在看了sina微博的塞班客户端的微博显示效果而想移植到Android平台上,因为它的体验很好,而我们做的效果就是要方便,要用户有很好的体验,但是可惜的是在sina官方的Android客户端...
  • muyu114
  • muyu114
  • 2011年05月24日 10:34
  • 6506

自动显示和隐藏头布局的ListView原来是那么简单

尊重原创,转载请注明:From zsml2016(http://blog.csdn.net/qq_29269233)Power byzsml2016侵权必究! 前言: 今天在看Android进阶的书籍...
  • qq_29269233
  • qq_29269233
  • 2016年12月14日 22:45
  • 1685

Android群英传学习笔记——自动显示、隐藏布局的ListView

Android群英传学习笔记——自动显示、隐藏布局的ListView
  • Fessible_Max
  • Fessible_Max
  • 2016年12月09日 00:59
  • 247

Android 自动显示与隐藏布局的 ListView

下面这个效果是,向下滑动 ListView ,其顶部布局自动显示;向上滑动 ListView ,其顶部的布局自动隐藏。效果如下:        首先这个效果的实现大致需要如下几步...
  • antimage08
  • antimage08
  • 2016年03月24日 21:53
  • 1699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自动显示与隐藏布局的ListView
举报原因:
原因补充:

(最多只允许输入30个字)