English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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涉嫌侵权的内 容立即删除。)