android - 安卓如何让View往屏幕外隐藏?
问题描述
如图,让和让最新那条插入的数据 显示在 顶部开始的地方,而旧的数据隐藏在顶部屏幕之外呢?
当插入 问题14的时候,,前13条被隐藏在顶部之外的地方了。怎么做到这样呢?模仿语言助手那种界面?如何做到
问题解答
回答1:以下两种方案都亲测可行:方案一:(无动画)
listView.setSelection(问题14的position);
方案二:(带动画)
ListView lvBaseList添加问题14后调用
final int targetPosition = 2;//假设你要置顶的ItemView的position = 2final long targetId = adapter.getItemId(targetPosition);View child = getTargetView(lvBaseList, targetId);final boolean isVisible = child != null;if (isVisible) {//问题14已显示 Log.d(TAG, 'lvBaseList.onItemClick isVisible = true >> '); Log.d(TAG, 'lvBaseList.onItemClick lvBaseList.getY() = ' + (int) lvBaseList.getY()); Log.d(TAG, 'lvBaseList.onItemClick child.getY() = ' + (int) child.getY()); lvBaseList.smoothScrollBy((int) (child.getY() - lvBaseList.getY()), 200); return;}//问题14未显示Log.d(TAG, 'lvBaseList.onItemClick isVisible = false >> ');lvBaseList.smoothScrollToPosition(targetPosition + lvBaseList.getHeaderViewsCount());lvBaseList.setOnScrollListener(new OnScrollListener() {@Override public void onScrollStateChanged(AbsListView view, int scrollState) {if (scrollState == SCROLL_STATE_IDLE) { lvBaseList.setOnScrollListener(null);//避免影响正常滚动 View child = getTargetView(lvBaseList, targetId); if (child == null) {Log.e(TAG, 'lvBaseList.onItemClick child == null >> return;');return; } Log.d(TAG, 'lvBaseList.onItemClick lvBaseList.getY() = ' + (int) lvBaseList.getY()); Log.d(TAG, 'lvBaseList.onItemClick child.getY() = ' + (int) child.getY());// lvBaseList.scrollListBy((int) (child.getY() - lvBaseList.getY()));//可行,无动画 lvBaseList.smoothScrollBy((int) (child.getY() - lvBaseList.getY()), 200);} }@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { }});
需要用到的函数:
//根据targetId获取childView private View getTargetView(ListView lvBaseList, long targetId) {View child = null;MomentView itemView;//MomentView相当于ViewHolder,里面存放item数据或者itemIdMomentItem item;for (int i = 0; i < lvBaseList.getChildCount(); i++) { child = lvBaseList.getChildAt(i); itemView = child == null ? null : (MomentView) child.getTag(); item = itemView == null ? null : itemView.getData(); Log.d(TAG, 'lvBaseList.onItemClick item.getId() = ' + (item == null ? 0 : item.getId()) + '; targetId = ' + targetId); if (item != null && item.getId() == targetId) {Log.d(TAG, 'lvBaseList.onItemClick item != null && item.getId() == targetId >> break;');break; } child = null;}return child; }
相关文章:
1. docker 17.03 怎么配置 registry mirror ?2. docker 下面创建的IMAGE 他们的 ID 一样?这个是怎么回事????3. mac连接阿里云docker集群,已经卡了2天了,求问?4. vue 子组件watch监听不到prop的解决5. java - Web开发 - POI导出带有下拉框的Excel和解决下拉中数组过多而产生的异常6. html5 - weex H5端的使用,怎么跑起来?7. 上传图片老是失败是什么原因?SAE_TMP_PATH.后面跟的路径在哪看8. mobile-web-design - html5 touchmove 怎么获取经过的元素?9. 微信订阅号如何用渠道二维码统计地推效果?10. 为啥总显示密码错误
