天天看點

關于學習android中v4包中PagerAdapter實作引導頁效果

</pre>剛進公司,菜鳥一隻,今天給自己規定的任務是學習如何開發一個項目的引導頁,廢話不多說,通過今天學習,算是了解了。<p></p><p>首先需要建立一個GuideActivity ,來填充買個引導頁的View。由于用的公司架構,是以有些地方可能不同。不過大概内容沒什麼不同。</p><p></p><p><pre name="code" class="html"><pre name="code" class="java">package com.xinhua.xinhuashe.option.guide;

import java.util.ArrayList;
import java.util.Timer;


public class NewGuideActivity extends ParentActivity {

	private ViewPager guide_vp;
	private Button guide_btn;
	private NewGuidePageAdater newguidePageAdater;
	private Timer timer;
	private TimerTask timerTask;
	private boolean timerIsRun = false;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		MobileApplication.allActivity.add(this);
		
		//建立一個填充器
		LayoutInflater inflater = LayoutInflater.from(NewGuideActivity.this);
		View view1 = inflater.inflate(R.layout.guide_view1, null);
		View view2 = inflater.inflate(R.layout.guide_view2, null);
		View view3 = inflater.inflate(R.layout.guide_view3, null);
		//建立一個list集合,存放三個view對象
		ArrayList<View> array = new ArrayList<View>();
		array.add(view1);
		array.add(view2);
		array.add(view3);
		
		newguidePageAdater = new NewGuidePageAdater(array);
		
		guide_vp.setAdapter(newguidePageAdater);
		//對viewpager 建立監聽,當在第三頁時進行計時,然後完成自動跳轉
		guide_vp.setOnPageChangeListener(changeListener);
		//對第三張中的button設定監聽 跳轉
		guide_btn = (Button) view3.findViewById(R.id.guide_btn);
		guide_btn.setOnClickListener(listener);
	}
	private OnPageChangeListener changeListener = new OnPageChangeListener() {
		
		@Override
		public void onPageSelected(int arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onPageScrolled(int position, float arg1, int arg2) {

			//timerIsRun 防止進來來回切換計時器混亂 隻進行一次延遲執行
			if (position==2&&!timerIsRun) {
				timer.schedule(timerTask, 3000, 500);
				timer.cancel();
				timerTask.cancel();
				timerIsRun = true;
			}
			
		}
		
		@Override
		public void onPageScrollStateChanged(int arg0) {
			// TODO Auto-generated method stub
			
		}
	};
	//按鈕跳轉
	private OnClickListener listener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			handler.sendEmptyMessage(0);
			timerTask.cancel();
			timer.cancel();
		}
	};
	@Override
	protected int getLayoutId() {
		return R.layout.guide;
	}

	@Override
	protected void setupViews() {
		guide_vp = (ViewPager) findViewById(R.id.guide_viewpager);
	}

	@Override
	protected void initialized() {
		timer = new Timer();
		timerTask = new TimerTask() {
			
			@Override
			public void run() {
				handler.sendEmptyMessage(0);
				timer.cancel();
				timerTask.cancel();
			}
		};

	}
	private Handler handler = new Handler(new Handler.Callback() {
		
		@Override
		public boolean handleMessage(Message msg) {
			Intent intent = new Intent(NewGuideActivity.this, SlidingMenuControlActivity.class);
			startActivity(intent);
			NewGuideActivity.this.finish();
			return true;
		}
	});

	@Override
	protected void threadTask() {

	}

}
           

下面是guideXml檔案

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.xinhuanews.shouyangnew"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <android.support.v4.view.ViewPager 
        android:id="@+id/guide_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />
    
    <com.xinhua.xinhuashe.view.FlowIndicator
        android:id="@id/homepage_header_FlowIndicator"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dip"
        app:count="3"
        app:point_normal_color="#45000000"
        app:point_radius="3dip"
        app:point_seleted_color="@color/white"
        app:point_size="5dip"
        app:space="10dip" />

</RelativeLayout>
           

上面頁面中

com.xinhua.xinhuashe.view.FlowIndicator這個控件是自定義的,以後等我研究懂了會粘出來,大家要用的時候可以将它删了。
           

下面是三個layout頁面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
	<ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/guide_1" />
</LinearLayout>
           

隻粘一個,剩下兩個一樣。

下面是PageAdater 的代碼

import java.util.ArrayList;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;


public class NewGuidePageAdater extends PagerAdapter {
	private ArrayList<View> listView;

	//構造方法
	public NewGuidePageAdater(ArrayList<View> listView) {
		this.listView = listView;
	}

	//擷取要滑動控件的數量,這裡就應該是我們所傳進來listView的size
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return listView.size();
	}

	//來判斷是否顯示的是同一張圖檔,我們傳進arg0==arg1即可
	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		// TODO Auto-generated method stub
		return arg0==arg1;
	}

	//PagerAdapter隻緩存三張圖檔,當大于三張是調用此方法銷毀圖檔
	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		container.removeView(listView.get(position));
	}

	//當顯示的圖檔可以進行緩存時,則調用此方法
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		container.addView(listView.get(position));
		return listView.get(position);
	}
	

}
           

有什麼地方模糊的,可以提出來 ,大家一起讨論,或者我給解答。謝謝

繼續閱讀