Android群英传——第四章自动显示隐藏ActionBar/Toolbar的ListView
来源:互联网 发布:淘宝名不虚传软件在哪 编辑:程序博客网 时间:2024/05/16 13:04
这中效果最为常见:
当ListView向上滑动的时候,Toolbar进行隐藏,当向下滑动时,Toolbar则又显示出来了。
如图
完整代码实现如下:
import android.animation.ObjectAnimator;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;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.AbsListView;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends AppCompatActivity { private Toolbar mToolbar; private ListView mListView; private String[] mStr = new String[20]; private int mTouchSlop; private float mFirstY; private float mCurrentY; private int direction; private ObjectAnimator mAnimator; private boolean mShow = true; View.OnTouchListener myTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mFirstY = event.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY = event.getY(); // 判断滑动方向 if (mCurrentY - mFirstY > mTouchSlop) { direction = 0;// down } else if (mFirstY - mCurrentY > mTouchSlop) { direction = 1;// up } // 根据滑动方向播放toolbar的隐藏或者显示的动画 if (direction == 1) { if (mShow) { toolbarAnim(1);//show mShow = !mShow; } } else if (direction == 0) { if (!mShow) { toolbarAnim(0);//hide mShow = !mShow; } } break; case MotionEvent.ACTION_UP: break; } return false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop(); mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); mListView = (ListView) findViewById(R.id.listView); for (int i = 0; i < mStr.length; i++) { mStr[i] = "Item " + i; } // 也可以使用 // (int) getResources().getDimension(R.dimen.abc_action_bar_default_height_material)方法 // 获取系统Toolbar的默认高度,但是不建议这么做,如果你要对Toolbar的高度进行定制,这个值并不能达到预期的效果 int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); mToolbar.measure(w, h); int toolbarHeight = mToolbar.getMeasuredHeight(); View header = new View(this); header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, toolbarHeight)); Log.i("logi", "====" + getSupportActionBar().getHeight()); mListView.addHeaderView(header); mListView.setAdapter(new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_expandable_list_item_1, mStr)); mListView.setOnTouchListener(myTouchListener); } private void toolbarAnim(int flag) { if (mAnimator != null && mAnimator.isRunning()) { mAnimator.cancel(); } if (flag == 0) { mAnimator = ObjectAnimator.ofFloat(mToolbar, "translationY", mToolbar.getTranslationY(), 0); } else { Log.i("logi", "===height" + mToolbar.getHeight()); Log.i("logi", "===ty" + mToolbar.getTranslationY()); // 使用属性动画将y偏移 mAnimator = ObjectAnimator.ofFloat(mToolbar, "translationY", mToolbar.getTranslationY(), -mToolbar.getHeight()); } mAnimator.start(); }}
1 0
- Android群英传——第四章自动显示隐藏ActionBar/Toolbar的ListView
- Android群英传学习笔记——自动显示、隐藏布局的ListView
- Android群英传——第四章具有弹性的ListView
- Android群英传笔记——第四章:ListView使用技巧
- Android群英传——第四章ListView常用优化
- Android群英传——第四章ListView滑动监听
- Android群英传笔记——第四章:ListView使用技巧
- Android群英传学习——第四章、ListView使用技巧
- 实现ListView的弹性效果,下拉隐藏ToolBar(ActionBar),上拉显示ToolBar
- Android群英传——第四章动态改变ListView的布局
- Android群英传知识点回顾——第四章:ListView常用优化技巧
- 《Android群英传》阅读笔记——第四章:ListView使用技巧
- 《Android群英传》读书笔记(3)第四章:ListView常用拓展
- Android群英传第四章笔记·ListView使用技巧
- Android群英传读书笔记第四章 (ListView使用技巧)
- android群英传笔记--第四章--ListView使用技巧(一)
- android群英传笔记--第四章--ListView使用技巧(二)
- 第四章ListView使用技巧(Android群英传)
- JDBC和连接池
- PCM数据格式
- JTAG/C2 接口定义
- Android应用开发:Android 多屏幕支持
- xmanager5连接suse linux桌面
- Android群英传——第四章自动显示隐藏ActionBar/Toolbar的ListView
- 开发规范:HTML规范
- python 轻量单元测试框架 JzUnit
- WDA 实现要点
- iOS UIView中 - (void)drawRect:(CGRect)rect;和-(void)ViewLayoutSubViews;的调用时机
- 【NOIP2012】国王游戏
- Linux ALSA声卡驱动之三:PCM设备的创建
- 降维
- Linux挂载文件系统时出现遇到问题wrong fs type