廣告條

public class MainActivity extends Activity {
	
	private int[] p_w_picpathResIds = {
			R.drawable.a,
			R.drawable.b,
			R.drawable.c,
			R.drawable.d,
			R.drawable.e,
	};

	private String[] descs = {
			"鞏俐不低俗,我就不能低俗",
			"撲樹又回來啦!再唱經典老歌引萬人大合唱",
			"揭祕北京電影如何升級",
			"樂視網TV版大派送",
			"熱血屌絲的反殺",
	};
	
	private View[] dots = new View[p_w_picpathResIds.length];
	
	private ImageView[] p_w_picpaths = new ImageView[p_w_picpathResIds.length];
	/** 當前選中的點 */
	private View currentDot;
	/** ViewPager的頁數 */
	private int pageSize = p_w_picpathResIds.length * 10000 * 100;
	
	private int halfPageSize = pageSize / 2;
	
	/** 自動切換圖片 */
	private static final int AUTO_SWITCH_IMAGE = 0;
	
	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case AUTO_SWITCH_IMAGE:
				swithImage();
				break;

			default:
				break;
			}
		};
	};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view_pager = (ViewPager) findViewById(R.id.view_pager);
        tv_desc = (TextView) findViewById(R.id.tv_desc);
        ll_dots = (LinearLayout) findViewById(R.id.ll_dots);
        
        for (int i = 0; i < p_w_picpathResIds.length; i++) {
			initImages(i);
			initDots(i);
		}
        
		view_pager.setOnPageChangeListener(mOnPageChangeListener);
        
        changeDescAndDot(0);
        
        view_pager.setAdapter(adapter);
        view_pager.setCurrentItem(halfPageSize);
    }
    
    @Override
    protected void onStart() {
    	super.onStart();
    	sendSwitchImageMessage();
    }
    
    @Override
    protected void onStop() {
    	super.onStop();
    	removeSiwtchImageMessage();
    }

    /** 移除切換圖片的消息 */
	private void removeSiwtchImageMessage() {
		handler.removeMessages(AUTO_SWITCH_IMAGE);
	}
    
    /** 切換圖片 */
    protected void swithImage() {
    	int currentItem = view_pager.getCurrentItem();
    	if (currentItem == view_pager.getAdapter().getCount() - 1) {
    		currentItem = 0;
		} else {
			currentItem++;
		}
    	view_pager.setCurrentItem(currentItem);
    	sendSwitchImageMessage();
	}

    /**
     * 發送切換圖片的消息
     */
	private void sendSwitchImageMessage() {
		handler.sendEmptyMessageDelayed(AUTO_SWITCH_IMAGE, 3000);
	}

	OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() {
		
    	// 當某一頁被選擇的時候
		@Override
		public void onPageSelected(int position) {
			changeDescAndDot(position);
		}
		
		// 當頁面滑動的時候
		@Override
		public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
			
		}
		
		// 當頁面滑動狀態發生改變的時候
		@Override
		public void onPageScrollStateChanged(int state) {
			if (state == ViewPager.SCROLL_STATE_IDLE) {
				sendSwitchImageMessage();
			} else {
				// 當前不是空閒狀態
				removeSiwtchImageMessage();
			}
		}
	};

    /**
     * 改變圖片描述和點
     * @param position
     */
    private void changeDescAndDot(int position) {
    	position = position % p_w_picpaths.length;	// 讓position在 0 ~ p_w_picpaths.length - 1之間
    	tv_desc.setText(descs[position]);
    	
    	// 如果原來有選中的點,把原來的變成未選擇狀態
    	if (currentDot != null) {
    		currentDot.setSelected(false);
		}
    	
    	// 把當前位置的點變成選擇狀態
    	dots[position].setSelected(true);
    	currentDot = dots[position];
    	
	}

	/** 初始化ViewPager裏面的點 */
	private void initDots(int i) {
		dots[i] = new View(this);
		LinearLayout.LayoutParams params = new LayoutParams(5, 5);
		if (i != 0) {
			// 如果不是第一個點要設置marginLeft屬性
			params.leftMargin = 5;
		}
		dots[i].setLayoutParams(params);
		dots[i].setBackgroundResource(R.drawable.selector_dot);
		ll_dots.addView(dots[i]);
	}

    /** 初始化圖片 */
	private void initImages(int i) {
		p_w_picpaths[i] = new ImageView(this);
		p_w_picpaths[i].setBackgroundResource(p_w_picpathResIds[i]);
	}
    
    PagerAdapter adapter = new PagerAdapter() {

		@Override
		public int getCount() {
			return pageSize;
		}

		@Override
		public boolean isViewFromObject(View view, Object object) {
			return view == object;
		}
		
		/**
		 * 生成要顯示的界面
		 * 相當於BaseAdapter中的getView
		 * @param container ViewPager對象
		 * @param position 要生成界面的位置
		 * 
		 */
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			position = position % p_w_picpaths.length;	// 讓position在 0 ~ p_w_picpaths.length - 1之間
			ImageView p_w_picpathView = p_w_picpaths[position];
			container.addView(p_w_picpathView);
			return p_w_picpathView;
		};
		
		/**
		 * 銷燬一個界面
		 * @param container ViewPager對象
		 * @param position 要銷燬界面的位置
		 * @param object instantiateItem方法的返回值
		 */
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView((View) object);
		};
		
		

	};

	private TextView tv_desc;

	private ViewPager view_pager;

	private LinearLayout ll_dots;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章