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

Implémentation de l'effet de diaporama dans Android ViewPager

Voici une capture d'écran pour illustrer :

En parlant de l'implémentation de l'effet de diaporama par ViewPager, on va certainement utiliser PagerAdapter, voici donc une introduction à cette classe.

Introduction à PagerAdapter

PagerAdapter est une classe de Android.support.v4Les classes contenues dans le paquet sont une classe abstraite, héritant directement de Object, et importées de android.support.v4.view.PagerAdapter peut être utilisé.

PagerAdapter est l'adapteur de viewPager, tandis que viewPager est également dans android.support.v4Un contrôle puissant ajouté dans le package étendu, capable de réaliser l'effet de glissement des contrôles, par exemple, l'effet de glissement de la bannière publicitaire courante dans notre logiciel, qui peut être réalisé avec viewPager. Aujourd'hui, nous allons principalement présenter comment utiliser viewPager et redéfinir PagerAdapter pour réaliser l'effet de glissement de la bannière publicitaire courante.

Puisque c'est une classe abstraite, nous créons une nouvelle classe pour l'hériter et redéfinissons les quatre méthodes :

 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)

Classe MyViewPagerAdapter :

public class MyViewPagerAdapter extends PagerAdapter {
private List<ImageView> mList;
public MyViewPagerAdapter(List<ImageView> mList){
 this.mList=mList;
}
//Lorsque l'image à afficher est en cache, cette méthode est appelée pour initialiser l'image
//Nous ajoutons l'ImageView que nous allons afficher au ViewGroup
public Object instantiateItem(ViewGroup container, int position) {
 // TODO Auto-métode généré
 container.addView(mList.get(position));
 return mList.get(position);
}
@Override
//PagerAdapter ne cache que trois images à afficher, si l'image glissée dépasse la portée du cache, cette méthode est appelée pour détruire l'image
public void destroyItem(ViewGroup container, int position, Object object) {
 // TODO Auto-métode généré
 container.removeView(mList.get(position));
}
//获取要滑动的控件的数量,
public int getCount() {
 // TODO Auto-métode généré
 return mList.size();
}
//来判断显示的是否是同一张照片,这个我们将两个图片对比 再返回
public boolean isViewFromObject(View arg0, Object arg1) {
 // TODO Auto-métode généré
 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;// Contient tous les titres à afficher
private int[] images;// Contient tous les identifiants de ressources d'images à afficher
private List<ImageView> list = new ArrayList<ImageView>();;// Contient toutes les ImageView à afficher dans l'objet ViewPager
private int prevPosition = 0;
private Handler handler = new Handler() {
 @SuppressLint("HandlerLeak") 
 public void handleMessage(android.os.Message msg) {
 switch (msg.what) {
 case 0:
  // Obtenir l'index de la page actuelle de mvp
  int currentItem = mVp.getCurrentItem();
  // L'index de la page suivante à afficher
  currentItem++;
  // Définir la page affichée par 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);
 //Générer le nombre de points ronds correspondants au nombre d'images
 final View view = new View(this);
 view.setBackgroundResource(R.drawable.login__05);
 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);
 }
 //Titre affiché pour la première page
 //tvTitle.setText(titles[0]);
 //Afficher l'image de fond du pointeur de la première page
 llPoints.getChildAt(0).setBackgroundResource(R.drawable.login__03);
 //Encapsulation de l'adaptateur viewPager ci-dessous
 MyViewPagerAdapter adapter=new MyViewPagerAdapter(list);
 mVp.setAdapter(adapter);
 //Configurer l'écouteur d'événement de changement de page de l'objet ViewPager
 mVp.setOnPageChangeListener(new OnPageChangeListener() {
 @Override
 //Lorsque la page suivante est sélectionnée
 public void onPageSelected(int arg0) {
  // TODO Auto-métode généré
  //tvTitle.setText(titles[arg0%list.size()]);
  llPoints.getChildAt(prevPosition).setBackgroundResource(R.drawable.login__05);
  llPoints.getChildAt(arg0).setBackgroundResource(R.drawable.login__03);
  //Positionner la position actuelle comme position précédente pour la prochaine variation
  prevPosition=arg0;
 }
 @Override
 public void onPageScrolled(int arg0, float arg1, int arg2) {
  // TODO Auto-métode généré
 }
 @Override
 public void onPageScrollStateChanged(int arg0) {
  // TODO Auto-métode généré
 }
 });
 new Thread(new Runnable() {
 @Override
 public void run() {
  // TODO Auto-métode généré
  while (true) {
  SystemClock.sleep(3000);
  handler.sendEmptyMessage(0);
  }
 }
 }).start();
}
private void initView() {
 // TODO Auto-métode généré
 mVp = (ViewPager) findViewById(R.id.vp);
 //tvTitle = (TextView) findViewById(R.id.tv_title);
 llPoints = (LinearLayout) findViewById(R.id.ll_points);
}
private int[] getImages(){
 return new int[]{R.drawable.banner_01,R.drawable.banner_02,R.drawable.banner_03};
}
}

C'est tout pour cet article, j'espère que cela aidera à votre apprentissage et que vous soutenirez beaucoup le tutoriel criard.

Déclaration : le contenu de cet article est来源于网络,et appartient à ses auteurs respectifs. Le contenu est apporté par les utilisateurs d'Internet et téléchargé spontanément. Le site web ne possède pas de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droit d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, le site supprimera immédiatement le contenu suspect de violation de droit d'auteur.

Vous pourriez aussi aimer