English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementación mágica de listView que muestra y oculta automáticamente el diseño de Android

借助View的OnTouchListener接口来监听listView的滑动,通过比较与上次坐标的大小,判断滑动方向,并通过滑动方向来判断是否需显示或者隐藏对应的布局,并且带有动画效果。

1.自动显示隐藏Toolbar

首先给listView增加一个HeaderView,避免第一个Item被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();
     romper;
    caso MotionEvent.ACTION_MOVE:
     mCurrentY=event.getY();
     if(mCurrentY-mFirstY>mTouchSlop)
      direction=0; //desplazamiento hacia abajo de listView
     else if(mFirstY-mCurrentY>mTouchSlop)
      direction=1; //desplazamiento hacia arriba de listView
     if(direction==1)
     {
      if(mShow)
      {
       toolbarAnim(1); //ocultar el view superior
       mShow=!mShow;
      }
     }
     else if(direction==0)
     {
      if(!mShow)
      {
       toolbarAnim(0); //mostrar el view superior
       mShow=!mShow;
      }
     }
    caso MotionEvent.ACTION_UP:
     romper;
    }
    devolver false;
   }
  });
 }

animación de propiedades 

protegido 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();
}

//la animación de propiedades de desplazamiento y transparencia se muestra aquí 

al usarlo, el tema debe ser NoActionBar, de lo contrario puede causar conflictos. Además, se debe incluir la compilación

dependencias{
   compilar archivoTree(incluye: ['*.jar',dir:'libs')
   compile 'com.android.support:appcompat-v7:21.0.3'
 } 

2Cuando el componente que se oculta y muestra no es toolbar, sino nuestro diseño personalizado myView, hay algunos puntos a tener en cuenta,
(1) El diseño debe usar el diseño relativo, permitiéndonos que nuestro diseño personalizado se suspenda sobre listView.
(2Evitar que el primer Item se oculte detrás de myView, añadir un HeaderView a listView. En este momento, es necesario medir la altura de myView, se debe usar el siguiente método, publicar la tarea en la línea de UI, de lo contrario se producirá un error. 

final View header=new View(this); //Añadir un headView a listView para evitar que el primer item se oscurezca header.post(new Runnable() {
 public void run() {
     header.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight()));
   }
  });

Los demás son como toolbar

Esto es todo el contenido de este artículo, espero que sea útil para su aprendizaje y que todos apoyen más al tutorial de gritos.

Declaración: el contenido de este artículo se obtiene de la red, pertenece al autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @ para denunciar y proporcione evidencia. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)

Te gustará