English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
View의 OnTouchListener 인터페이스를 통해 listView의 스와이프를 감지하고, 이전 좌표와의 차이를 비교하여 스와이프 방향을 판단하고, 해당 레이아웃을 보이거나 숨기는지 결정합니다. 또한 애니메이션 효과가 포함됩니다.
1.자동으로 Toolbar을 숨기거나 보입니다
먼저 listView에 HeaderView를 추가하여 첫 번째 아이템이 Toolbar에 가려지지 않도록 합니다.
View header=new View(this); header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, (int)getResources().getDimension(R.dimen.abc_action_bar_default_height_material))); mListView.addHeaderView(header); //R.dimen.abc_action_bar_default_height_material은 시스템ActionBar의 높이입니다
mTouchSlop 변수를 정의하여 시스템이认める最低스와이프 거리를 가져옵니다
mTouchSlop=ViewConfiguration.get(this).getScaledTouchSlop();//시스템이认める最低스와이프 거리
스와이프 이벤트를 판단합니다
bbsListView.setOnTouchListener(new 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; //listView 가 하단으로 스크롤됩니다 else if(mFirstY-mCurrentY>mTouchSlop) direction=1; //listView 가 상단으로 스크롤됩니다 if(direction==1) { if(mShow) { toolbarAnim(1); //상단 view 를 숨깁니다 mShow=!mShow; } } else if(direction==0) { if(!mShow) { toolbarAnim(0); //상단 view 를 표시합니다 mShow=!mShow; } } case MotionEvent.ACTION_UP: break; } return false; } }); }
속성 애니메이션
protected void toolbarAnim(int flag) { if(set!=null && set.isRunning()) { set.cancel(); } if(flag==0) { mAnimator1=ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(),0); mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 0f,1f); } else if(flag==1) { mAnimator1=ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(),-linearView.getHeight()); mAnimator2=ObjectAnimator.ofFloat(mToolbar, "alpha", 1f,0f); } set=new AnimatorSet(); set.playTogether(mAnimator1,mAnimator2); set.start(); } //위에는 위치 이동과 투명도 속성 애니메이션があります
사용할 때 theme 을 NoActionBar 로 사용해야 합니다. 그렇지 않으면 충돌이 발생할 수 있습니다. 동시에 컴파일
compile fileTree(include:["", "第2段": "{*.jar', dir: 'libs' }} compile 'com.android.support:appcompat-v7:21.0.3' }
2컴포넌트가 숨기기와 표시하기를 위해 toolbar가 아니라, 우리가 정의한 레이아웃 myView인 경우, 몇 가지 점을 주의해야 합니다.
(1) 레이아웃은 상대 레이아웃을 사용해야 하며, 우리가 정의한 레이아웃이 listView 위에 float하여야 합니다.
(2첫 번째 Item이 myView에 가려지지 않도록, listView에 HeaderView를 추가하려면, 이제 myView의 높이를 측정해야 합니다. 아래와 같은 방법으로 작업을 UI 스레드에 포스트하면, 실행 중에 오류가 발생하지 않습니다.
final View header=new View(this); //listView에 headView를 추가하여 첫 번째 item이 가려지지 않도록 header.post(new Runnable() { public void run() { header.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight())); } });
기타는 toolbar와 같습니다
위에 설명된 것은 편집자가 여러분에게 안내한 Android ListView 자동으로 레이아웃을 숨기고 표시하는 방법입니다. 여러분께 도움이 되길 바랍니다. 어떤 질문이든 댓글을 남겨 주시면, 편집자가 즉시 답변 드리겠습니다. 또한, 노아웃 교재 사이트에 대한 여러분의 지지에 깊이 감사드립니다!
고지: 이 문서의 내용은 인터넷에서 가져왔으며, 원저자에게 독점적 권리가 있습니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공적인 편집 처리를 하지 않았으며, 관련 법적 책임을 지지 않습니다. 저작권 위반 내용이 발견되면 이메일을 notice#w로 보내 주시기 바랍니다.3codebox.com에 이메일을 보내서 #을 @으로 바꾸고, 관련 증거를 제공하시면, 확인되면 즉시 위반 내용을 제거할 것입니다.