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

Android ViewPager实现轮播图效果

Ecco un'immagine di esempio:

Parlando dell'implementazione dell'effetto di scorrimento a rotazione con ViewPager, sicuramente verrà utilizzato PagerAdapter, quindi prima presentiamo questa classe.

Introduzione a PagerAdapter

PagerAdapter è una classe nel pacchetto Android.support.v4, è una classe astratta, eredita direttamente da Object, puoi usarla importando il pacchetto android.support.v4.view.PagerAdapter.

PagerAdapter è l'adattatore per ViewPager, mentre viewPager è anche un potente controllo aggiunto nel pacchetto android.support.v4, che può implementare l'effetto di scorrimento del controllo, come l'effetto di scorrimento dell'banner pubblicitario comune nei nostri software, che può essere realizzato utilizzando viewPager. Oggi parleremo principalmente di come utilizzare viewPagr e sovrascriverePagerAdapter per implementare l'effetto di scorrimento dell'banner pubblicitario comune.

Poiché è una classe astratta, creiamo una nuova classe che la estende e sovrascriviamo quattro metodi: }}

 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;
}
// Quando l'immagine da visualizzare viene cacheata, viene chiamato questo metodo per inizializzare l'immagine
// Aggiungiamo l'ImageView da visualizzare al ViewGroup
public Object instantiateItem(ViewGroup container, int position) {
 // TODO Auto-generated method stub
 container.addView(mList.get(position));
 return mList.get(position);
}
@Override
// IlPagerAdapter mantiene in cache solo tre immagini da visualizzare, se l'immagine scorrendo supera il range del cache, viene chiamato questo metodo per distruggere l'immagine
public void destroyItem(ViewGroup container, int position, Object object) {
 // TODO Auto-generated method stub
 container.removeView(mList.get(position));
}
// Ottenere il numero di controlli da scorrere
public int getCount() {
 // TODO Auto-generated method stub
 return mList.size();
}
// per determinare se viene visualizzata la stessa immagine, confrontiamo due immagini e restituiamo il risultato
public boolean isViewFromObject(View arg0, Object arg1) {
 // TODO Auto-generated method stub
 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; // Contiene tutti i titoli da visualizzare
private int[] images; // Contiene tutti gli id delle risorse delle immagini da visualizzare
private List<ImageView> list = new ArrayList<ImageView>(); // Contiene tutti gli oggetti ImageView da visualizzare nell'oggetto ViewPager
private int prevPosition = 0;
private Handler handler = new Handler() {
 @SuppressLint("HandlerLeak") 
 public void handleMessage(android.os.Message msg) {
 switch (msg.what) {
 case 0:
  // 得到mvp当前页面的索引
  int currentItem = mVp.getCurrentItem();
  // 要显示的下一个页面的索引
  currentItem++;
  // 设置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);
 // 根据图片的数量生成相对应的数量的小圆点
 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);
 }
 //设置第一页显示的标题
 //tvTitle.setText(titles[0]);
 //设置第一页的时候,小圆点显示的背景图
 llPoints.getChildAt(0).setBackgroundResource(R.drawable.login__03);
 //下面封装viewpager的适配器
 MyViewPagerAdapter adapter=new MyViewPagerAdapter(list);
 mVp.setAdapter(adapter);
 //设置ViewPager对象页面变化时的监听
 mVp.setOnPageChangeListener(new OnPageChangeListener() {
 @Override
 //当下一个页面被选择的时候
 public void onPageSelected(int arg0) {
  // TODO Auto-generated method stub
  //tvTitle.setText(titles[arg0%list.size()]);
  llPoints.getChildAt(prevPosition).setBackgroundResource(R.drawable.login__05);
  llPoints.getChildAt(arg0).setBackgroundResource(R.drawable.login__03);
  //把当前点位置做为下一次变化的前一个点的位置
  prevPosition=arg0;
 }
 @Override
 public void onPageScrolled(int arg0, float arg1, int arg2) {
  // TODO Auto-generated method stub
 }
 @Override
 public void onPageScrollStateChanged(int arg0) {
  // TODO Auto-generated method stub
 }
 });
 new Thread(new Runnable() {
 @Override
 public void run() {
  // TODO Auto-generated method stub
  while (true) {
  SystemClock.sleep(3000);
  handler.sendEmptyMessage(0);
  }
 }
 }).start();
}
private void initView() {
 // TODO Auto-generated method stub
 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};
}
}

Questo è tutto il contenuto dell'articolo, speriamo che sia utile per la tua apprendimento, e speriamo che tu supporti fortemente la guida di iniezione.

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il copyright spetta ai rispettivi proprietari, il contenuto è stato contribuito e caricato dagli utenti di Internet autonomamente, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.