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

Implementación del efecto de carrusel en ViewPager de Android

Primero presentamos una imagen de efecto:

Al hablar de implementar el efecto de reproducción automática de ViewPager, inevitablemente se usará PagerAdapter, por lo que primero presentaremos esta clase.

Introducción a PagerAdapter

PagerAdapter es Android.support.v4Las clases en el paquete son una clase abstracta, que hereda directamente de Object, e importan el paquete android.support.v4.view.PagerAdapter se puede usar.

PagerAdapter es el adaptador de viewPager, y viewPager también se encuentra en android.support.v4Un控件 potente recién añadido en el paquete extendido, que puede implementar efectos de deslizamiento de控件, como los efectos de deslizamiento de la publicidad común en nuestras aplicaciones, que se pueden lograr con viewPager. Hoy se presentará cómo usar viewPager y reescribir PagerAdapter para implementar efectos de deslizamiento de publicidad común.

Como es una clase abstracta, creamos una nueva clase para heredar de ella y reescribir cuatro métodos:

 1.public Object instantiateItem(ViewGroup container, int position)

 2.public void destroyItem(ViewGroup container, int position, Object object)

 3.public int getCount()

 4.public boolean isViewFromObject(View arg0, Object arg1)

Clase MyViewPagerAdapter:

public class MyViewPagerAdapter extends PagerAdapter {
private List<ImageView> mList;
public MyViewPagerAdapter(List<ImageView> mList){
 this.mList=mList;
}
//Cuando la imagen que se va a mostrar se cachea, se llama a este método para inicializar la imagen
//Añadiremos el ImageView que vamos a mostrar al ViewGroup
public Object instantiateItem(ViewGroup container, int position) {
 // TODO Auto-método de plantilla generado
 container.addView(mList.get(position));
 return mList.get(position);
}
@Override
//PagerAdapter solo almacena tres imágenes que deben mostrarse, si la imagen deslizada excede el rango de la caché, se llama a este método para destruir la imagen
public void destroyItem(ViewGroup container, int position, Object object) {
 // TODO Auto-método de plantilla generado
 container.removeView(mList.get(position));
}
//obtener la cantidad de controles que se deben deslizar,
public int getCount() {
 // TODO Auto-método de plantilla generado
 return mList.size();
}
//para determinar si se muestra la misma foto, esto lo haremos comparando dos imágenes y devolveremos
public boolean isViewFromObject(View arg0, Object arg1) {
 // TODO Auto-método de plantilla generado
 return arg0==arg1;
}
}

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
 android:id="@"+id/vp"
 android:layout_width="match_parent"
 android:layout_height="200dp" />
<LinearLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignBottom="@id/vp"
 android:background="#33000000"
 android:orientation="vertical"
 android:paddingBottom="10dp" >
 <LinearLayout
 android:id="@"+id/ll_points"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:gravity="center_horizontal"
 android:orientation="horizontal"
 android:paddingBottom="10dp" >
 </LinearLayout>
</LinearLayout>
</RelativeLayout>

MainActivity:

public class MainActivity extends Activity {
private ViewPager mVp;
//private TextView tvTitle;
private LinearLayout llPoints;
//private String[] titles;// Store all titles to be displayed
private int[] images;// Store all image resource ids to be displayed
private List<ImageView> list = new ArrayList<ImageView>();;// Store all ImageView objects to be displayed in the ViewPager object
private int prevPosition = 0;
private Handler handler = new Handler() {
 @SuppressLint("HandlerLeak") 
 public void handleMessage(android.os.Message msg) {
 switch (msg.what) {
 case 0:
  // Get the index of the current page of mvp
  int currentItem = mVp.getCurrentItem();
  // Index of the next page to be displayed
  currentItem++;
  // Set the page displayed by ViewPager
  mVp.setCurrentItem(currentItem % list.size());
  break;
 default:
  break;
 }
 };
};
@SuppressWarnings("deprecation")
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 initView(); 
 // titles = getTitles();
 images = getImages();
 for (int i = 0; i < images.length; i++) {
 ImageView iv = new ImageView(this);
 iv.setBackgroundResource(images[i]);
 list.add(iv);
 //Generate the corresponding number of small dots according to the number of images
 final View view = new View(this);
 view.setBackgroundResource(R.drawable.login__0)5);
 DisplayMetrics metrics = new DisplayMetrics();
 float width=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX,30, metrics);
 float height=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 30, metrics);
 LinearLayout.LayoutParams params=new LinearLayout.LayoutParams((int)width,(int)height);
 params.leftMargin=5;
 view.setLayoutParams(params);
 llPoints.addView(view);
 }
 //Establecer el título que se muestra en la primera página
 //tvTitle.setText(titles[0]);
 //Establecer el fondo del punto pequeño cuando se establece la primera página
 llPoints.getChildAt(0).setBackgroundResource(R.drawable.login__03);
 //A continuación, encapsular el adaptador de viewPager
 MyViewPagerAdapter adapter=new MyViewPagerAdapter(list);
 mVp.setAdapter(adapter);
 //Establecer el objeto ViewPager para escuchar los cambios de página
 mVp.setOnPageChangeListener(new OnPageChangeListener() {
 @Override
 //Cuando se selecciona la próxima página
 public void onPageSelected(int arg0) {
  // TODO Auto-método de plantilla generado
  //tvTitle.setText(titles[arg0%list.size()]);
  llPoints.getChildAt(prevPosition).setBackgroundResource(R.drawable.login__05);
  llPoints.getChildAt(arg0).setBackgroundResource(R.drawable.login__03);
  //Hacer que la posición actual del punto sea la posición anterior del punto para la próxima cambio
  prevPosition=arg0;
 }
 @Override
 public void onPageScrolled(int arg0, float arg1, int arg2) {
  // TODO Auto-método de plantilla generado
 }
 @Override
 public void onPageScrollStateChanged(int arg0) {
  // TODO Auto-método de plantilla generado
 }
 });
 new Thread(new Runnable() {
 @Override
 public void run() {
  // TODO Auto-método de plantilla generado
  while (true) {
  SystemClock.sleep(3000);
  handler.sendEmptyMessage(0);
  }
 }
 }).start();
}
private void initView() {
 // TODO Auto-método de plantilla generado
 mVp = (ViewPager) findViewById(R.id.vp);
 //tvTitle = (TextView) findViewById(R.id.tv_title);
 llPoints = (LinearLayout) findViewById(R.id.ll_points);
}
private int[] getImages(){
 devolver new int[]{R.drawable.banner_01,R.drawable.banner_02,R.drawable.banner_03};
}
}

Este es el contenido completo del artículo, esperamos que sea útil para su aprendizaje y que todos nos apoyen en el tutorial de clamor.

Declaración: El contenido de este artículo se obtiene de la red, pertenece al propietario original, el contenido se contribuye y carga espontáneamente por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha realizado un procesamiento editorial humano y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar, y proporcione evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará