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