android - 安卓如何讓View往屏幕外隱藏?
問題描述
如圖,讓和讓最新那條插入的數(shù)據(jù) 顯示在 頂部開始的地方,而舊的數(shù)據(jù)隱藏在頂部屏幕之外呢?
當(dāng)插入 問題14的時(shí)候,,前13條被隱藏在頂部之外的地方了。怎么做到這樣呢?模仿語言助手那種界面?如何做到
問題解答
回答1:以下兩種方案都親測(cè)可行:方案一:(無動(dòng)畫)
listView.setSelection(問題14的position);
方案二:(帶動(dòng)畫)
ListView lvBaseList添加問題14后調(diào)用
final int targetPosition = 2;//假設(shè)你要置頂?shù)腎temView的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);//避免影響正常滾動(dòng) 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()));//可行,無動(dòng)畫 lvBaseList.smoothScrollBy((int) (child.getY() - lvBaseList.getY()), 200);} }@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { }});
需要用到的函數(shù):
//根據(jù)targetId獲取childView private View getTargetView(ListView lvBaseList, long targetId) {View child = null;MomentView itemView;//MomentView相當(dāng)于ViewHolder,里面存放item數(shù)據(jù)或者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; }
相關(guān)文章:
1. 前端 - html5 audio不能播放2. java固定鍵值轉(zhuǎn)換,使用枚舉實(shí)現(xiàn)字典?3. vim - win10無法打開markdown編輯器4. mysql - 千萬數(shù)據(jù) 分頁,當(dāng)偏移量 原來越大時(shí),怎么優(yōu)化速度5. 如何解決tp6在zend中無代碼提示6. javascript - 有沒有類似高鐵管家的時(shí)間選擇插件7. 這是什么情況???8. python - flask學(xué)習(xí),user_syy添加報(bào)role is invalid keyword for User.9. css - BEM 中塊(Block)有木有什么標(biāo)準(zhǔn) 何時(shí)決定一個(gè)部分提取為塊而不是其父級(jí)的元素呢(Element)?~10. javascript - 微信網(wǎng)頁開發(fā)從菜單進(jìn)入頁面后,按返回鍵沒有關(guān)閉瀏覽器而是刷新當(dāng)前頁面,求解決?
