</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);
}
}
有什麼地方模糊的,可以提出來 ,大家一起讨論,或者我給解答。謝謝