资源说明:ListView上滑和下滑,显示和隐藏Toolbar的实现方法
Android开发中,ListView是一种常用的控件,它可以展示大量的数据,但是当用户滑动ListView时,如果Toolbar一直显示在屏幕上,可能会影响用户的体验。因此,实现ListView上滑和下滑,显示和隐藏Toolbar的功能是非常有用的。本文将为大家分享一篇ListView上滑和下滑,显示和隐藏Toolbar的实现方法,具有很好的参考价值,希望对大家有所帮助。
在AndroidManifest.xml文件中,我们需要隐藏系统自带的ActionBar,在标签中添加android:theme="@style/Theme.AppCompat.Light.NoActionBar",并且Activity需要继承AppCompatActivity。
在布局文件中,我们需要添加Toolbar和ListView。Toolbar是ActionBar的替代品,它可以提供更多的自定义功能。ListView是用来展示数据的控件,它可以自动加载更多的数据。我们可以在activity_main.xml文件中添加以下代码:
```xml
```
在MainActivity中,我们需要获取ListView和Toolbar的实例,并且设置ListView的Adapter。我们还需要定义一些变量来记录用户的滑动距离和toolbar的显示状态。
```java
package com.example.listview_unit4_1;
import android.animation.ObjectAnimator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView listView;
private List listViewData;//数据源
private ArrayAdapter adapter;
private Toolbar toolbar;
private int mTouchSlop;//系统认为的最小滑动距离
private float mFirstY;//用户首次触摸的Y坐标
private float mLastY;//用户滑动结束时Y坐标
private ObjectAnimator mAnimator;//将控件与动画联系起来的类(可以使指定的控件,实现指定的动画效果)
private boolean mShow;//toolbar是否显示
@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.list_view);
listViewData = new ArrayList<>();
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listViewData);
listView.setAdapter(adapter);
//...
}
```
在onTouchEvent方法中,我们需要记录用户的滑动距离,并且根据滑动距离来决定toolbar是否显示。
```java
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mFirstY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
mLastY = event.getY();
if (mLastY - mFirstY > mTouchSlop) {
//用户上滑
mShow = false;
mAnimator = ObjectAnimator.ofFloat(toolbar, "translationY", 0, -toolbar.getHeight());
mAnimator.start();
} else if (mFirstY - mLastY > mTouchSlop) {
//用户下滑
mShow = true;
mAnimator = ObjectAnimator.ofFloat(toolbar, "translationY", -toolbar.getHeight(), 0);
mAnimator.start();
}
break;
default:
break;
}
return super.onTouchEvent(event);
}
```
在上面的代码中,我们使用ObjectAnimator来实现toolbar的动画效果。当用户上滑时,toolbar会隐藏;当用户下滑时,toolbar会显示。
实现ListView上滑和下滑,显示和隐藏Toolbar的功能需要我们合理地使用ListView和Toolbar,并且记录用户的滑动距离,并根据滑动距离来决定toolbar是否显示。这个功能可以大大提高用户的体验。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。