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

Android ViewPager zur Erstellung eines Slide-Show-Effekts

Hier ist ein Bild der visuellen Darstellung:

Wenn von der ViewPager-Implementierung des Bildergalerieeffekts die Rede ist, wird sicherlich PagerAdapter verwendet. Lassen Sie uns zunächst diese Klasse vorstellen.

PagerAdapter Kurzbefehl

PagerAdapter ist ein Teil von Android.support.v4Die im Paket enthaltenen Klassen sind abstrakte Klassen, die direkt von Object erben und das Paket android.support.v importieren.4.view.PagerAdapter verwendet werden kann.

PagerAdapter ist der Adapter von viewPager, während viewPager ebenfalls in android.support.v4Ein neuer, leistungsstarker Controllelement in der Erweiterungspackung, der dasScroll-Effect von Controllelementen implementieren kann, z.B. den Scroll-Effekt von Werbebanner, den wir in der Software oft sehen, kann mit viewPager realisiert werden. Heute werde ich hauptsächlich die Verwendung von viewPager und die Überschreibung vonPagerAdapter zur Realisierung des Scroll-Effekts von Werbebanner behandeln.

Da es sich um eine abstrakte Klasse handelt, erstellen wir eine neue Klasse, um sie zu erben und die vier Methoden zu überschreiben:

 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)

MyViewPagerAdapter-Klasse:

public class MyViewPagerAdapter extends PagerAdapter {
private List<ImageView> mList;
public MyViewPagerAdapter(List<ImageView> mList){
 this.mList=mList;
}
//Wenn das anzuzeigende Bild gecacht wird, wird diese Methode aufgerufen, um das Bild zu initialisieren
//Wir fügen den ImageView, den wir anzeigen möchten, in das ViewGroup ein
public Object instantiateItem(ViewGroup container, int position) {
 // TODO Auto-generierter Methodenstutzen
 container.addView(mList.get(position));
 return mList.get(position);
}
@Override
//PagerAdapter speichert nur drei zu displayende Bilder, wenn das gescrollte Bild den Bereich des Caches übersteigt, wird dieser Methode aufgerufen, um das Bild zu zerstören
public void destroyItem(ViewGroup container, int position, Object object) {
 // TODO Auto-generierter Methodenstutzen
 container.removeView(mList.get(position));
}
//den Anzahl der zu scrollenden Steuerelemente zu erhalten,
public int getCount() {
 // TODO Auto-generierter Methodenstutzen
 return mList.size();
}
//um zu bestimmen, ob das angezeigte Bild das gleiche ist, vergleichen wir die beiden Bilder und geben zurück
public boolean isViewFromObject(View arg0, Object arg1) {
 // TODO Auto-generierter Methodenstutzen
 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;// Speichern Sie alle Titel, die angezeigt werden sollen
private int[] images;// Speichern Sie alle Ressourcen-ID der Bilder, die angezeigt werden sollen
private List<ImageView> list = new ArrayList<ImageView>();;// Speichern Sie alle ImageView-Objekte, die im ViewPager-Objekt angezeigt werden sollen
private int prevPosition = 0;
private Handler handler = new Handler() {
 @SuppressLint("HandlerLeak") 
 public void handleMessage(android.os.Message msg) {
 switch (msg.what) {
 case 0:
  // Erhalten Sie den Index der aktuellen Seite von mvp
  int currentItem = mVp.getCurrentItem();
  // Index der nächsten anzuzeigenden Seite
  currentItem++;
  // Setzen Sie die Seite, die der ViewPager anzeigt
  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);
 //Erstellen Sie entsprechend der Anzahl der Bilder die entsprechenden kleinen Kreise
 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);
 }
 //Setzen Sie den Titel für die erste Seite
 //tvTitle.setText(titles[0]);
 //Setzen Sie die kleinen Kreisen als Hintergrundbild an, wenn die erste Seite eingestellt wird
 llPoints.getChildAt(0).setBackgroundResource(R.drawable.login__03);
 //Below is the encapsulation of the viewPager adapter
 MyViewPagerAdapter adapter=new MyViewPagerAdapter(list);
 mVp.setAdapter(adapter);
 //Setzen Sie den Hörer für die Seitenversion des ViewPager-Objekts
 mVp.setOnPageChangeListener(new OnPageChangeListener() {
 @Override
 //Wenn die nächste Seite ausgewählt wird
 public void onPageSelected(int arg0) {
  // TODO Auto-generierter Methodenstutzen
  //tvTitle.setText(titles[arg0%list.size()]);
  llPoints.getChildAt(prevPosition).setBackgroundResource(R.drawable.login__05);
  llPoints.getChildAt(arg0).setBackgroundResource(R.drawable.login__03);
  //Den aktuellen Punktposition als die Position des vorherigen Punkts für den nächsten Änderungsvorgang setzen
  prevPosition=arg0;
 }
 @Override
 public void onPageScrolled(int arg0, float arg1, int arg2) {
  // TODO Auto-generierter Methodenstutzen
 }
 @Override
 public void onPageScrollStateChanged(int arg0) {
  // TODO Auto-generierter Methodenstutzen
 }
 });
 new Thread(new Runnable() {
 @Override
 public void run() {
  // TODO Auto-generierter Methodenstutzen
  while (true) {
  SystemClock.sleep(3000);
  handler.sendEmptyMessage(0);
  }
 }
 }).start();
}
private void initView() {
 // TODO Auto-generierter Methodenstutzen
 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};
}
}

Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass er Ihnen bei Ihrem Lernen hilft und dass Sie die呐喊教程大力支持.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie Inhalte finden, die möglicherweise gegen das Urheberrecht verstoßen, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine Beschwerde einreichen, und fügen Sie relevante Beweise bei. Sobald überprüft, wird diese Website die涉嫌侵权的内 容立即删除。)

Möchten Sie auch