如果轉載,請註明出處,謝謝。
之前我們寫的主頁面,樣子太搓。先上圖。
圖中,最上面的ImageView特別的醜。於是就想改一下,做成PC端很流形的大圖輪轉。
完成的效果是這個樣字的,我先文字描述一下,我們這裏有6張圖,可以手勢左右滑動,同時動態的每隔2秒鐘跳轉到下一張圖片。大致流程就是這樣。
上圖:
在這裏我們需要把普通的ImaeView改成ViewPager。而ViewPager是無法直接使用的,我次奧。
爲了使用使用ViewPager,我們去Android Private libraries目錄下的android-support-v4.jar包下面的android.support.v4.view包下面,找到ViewPager.class。拷貝路徑,在xml文件裏引用
把原來的
<ImageView
android:layout_width="match_parent"
android:layout_height="100dip"
android:src="@drawable/ad" />
替換成 <android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/view_pager">
private ViewPager view_pager;
view_pager = (ViewPager) findViewById(R.id.view_pager);
view_pager.setAdapter(adapter2);
private class MyViewPagerAdapter extends PagerAdapter {
/**
* 返回圖片個數
*/
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
object = null;
}
/**
* 獲得相應位置上的view container view的容器,其實就是viewpager自身 position 相應的位置
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
// 給 container 添加一個view
container.addView(imageList.get(position % imageList.size()));
// 返回一個和該view相對的object
return imageList.get(position % imageList.size());
}
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/**
* 獲得相應位置上的view container view的容器,其實就是viewpager自身 position 相應的位置
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
// 給 container 添加一個view
container.addView(imageList.get(position % imageList.size()));
// 返回一個和該view相對的object
return imageList.get(position % imageList.size());
}
相當於繼承Basedadapter時候實現的getView方法。
ArrayList<ImageView> imageList;
imageList = new ArrayList<ImageView>();
for (int i = 0; i < ads.length; i++) {
// 初始化圖片資源
ImageView image = new ImageView(this);
image.setBackgroundResource(ads[i]);
imageList.add(image);
}
ads是圖片數組
private static int[] ads = { R.drawable.ad1, R.drawable.ad2,R.drawable.ad3, R.drawable.ad4, R.drawable.ad5, R.drawable.ad6 };
@Override
/**
* 獲得頁面的總數
*/
public int getCount() {
return Integer.MAX_VALUE;
}
/*
* 自動循環:
* 1、定時器:Timer
* 2、開子線程 while true 循環
* 3、ColckManager
* 4、 用handler 發送延時信息,實現循環
*/
我們這裏用最後一種去試下。
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
view_pager.setCurrentItem(view_pager.getCurrentItem() + 1);
if (isRunning) {
handler.sendEmptyMessageDelayed(0, 2000);
}
}
};
isRunning = true;
handler.sendEmptyMessageDelayed(0, 2000);