1、實現的效果圖 html
也許是養成了這樣一個習慣,每次看別人的代碼前,必需要先看實現的效果圖達到了一個什麼樣的效果,是否是跟本身想要實現的效果相似,有圖纔有真相嘛,呵呵。 java
2、編碼前的準備工做 android
ViewPager是Android3.0以後提供的新特性,因此要想讓你的應用向下兼容就必需要android-support-v4.jar這個包的支持,這是一個來自google提供的一個附加包。你們搜下便可。
ide
3、項目結構圖 佈局
4、具體的編碼實現 ui
一、 佈局界面比較簡單,加入ViewPager組件,以及底部的引導小點,activity_main.xml: this
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="24.0dip"
android:orientation="horizontal"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/point"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/point"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/point"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="15.0dip"
android:src="@drawable/point"/>
</LinearLayout>
</RelativeLayout>
二、ViewPager中View填充頁面,item_view.xml: google
<?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:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerCrop" />
</LinearLayout>
三、其中小點的圖片用一個selector來控制顏色,point.xml: 編碼
<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:drawable="@drawable/point_normal" />
<item android:state_enabled="false" android:drawable="@drawable/point_select" />
</selector>
四、 ViewPager適配器代碼,ViewPagerAdapter.java: spa
/**
* 功能描述:ViewPager適配器,用來綁定數據和view
*/
public class ViewPagerAdapter extends PagerAdapter {
//界面列表
private ArrayList<View> views;
public ViewPagerAdapter (ArrayList<View> views){
this.views = views;
}
/**
* 得到當前界面數
*/
@Override
public int getCount() {
if (views != null) {
return views.size();
}
return 0;
}
/**
* 初始化position位置的界面
*/
@Override
public Object instantiateItem(View view, int position) {
((ViewPager) view).addView(views.get(position), 0);
return views.get(position);
}
/**
* 判斷是否由對象生成界面
*/
@Override
public boolean isViewFromObject(View view, Object arg1) {
return (view == arg1);
}
/**
* 銷燬position位置的界面
*/
@Override
public void destroyItem(View view, int position, Object arg2) {
((ViewPager) view).removeView(views.get(position));
}
}
五、主程序入口類,MainActivity.java:
public class MainActivity extends Activity {
//定義ViewPager對象
private ViewPager viewPager;
//定義ViewPager適配器
private ViewPagerAdapter vpAdapter;
//定義一個ArrayList來存放View
private ArrayList<View> views;
//引導圖片資源
private static final int[] pics = {R.drawable.guide1,R.drawable.guide2,R.drawable.guide3,R.drawable.guide4,R.drawable.guide5};
//底部小點的圖片
private ImageView[] points;
//記錄當前選中位置
private int currentIndex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
/**
* 初始化組件
*/
private void initView(){
//實例化ArrayList對象
views = new ArrayList<View>();
//實例化ViewPager
viewPager = (ViewPager) findViewById(R.id.viewpager);
//實例化ViewPager適配器
vpAdapter = new ViewPagerAdapter(views);
}
/**
* 初始化數據
*/
private void initData(){
LayoutInflater inflater = getLayoutInflater();
for(int i=0; i<pics.length; i++) {
View v = inflater.inflate(R.layout.item_view, null);
ImageView image = (ImageView)v.findViewById(R.id.image);
image.setImageResource(pics[i]);
views.add(v);
}
//設置數據
viewPager.setAdapter(vpAdapter);
//設置監聽
viewPager.setOnPageChangeListener(new pageListener());
//初始化底部小點
initPoint();
}
/**
* 初始化底部小點
*/
private void initPoint(){
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll);
points = new ImageView[pics.length];
//循環取得小點圖片
for (int i = 0; i < pics.length; i++) {
//獲得一個LinearLayout下面的每個子元素
points[i] = (ImageView) linearLayout.getChildAt(i);
//默認都設爲灰色
points[i].setEnabled(true);
//給每一個小點設置監聽
points[i].setOnClickListener(new pointListener());
//設置位置tag,方便取出與當前位置對應
points[i].setTag(i);
}
//設置當面默認的位置
currentIndex = 0;
//設置爲白色,即選中狀態
points[currentIndex].setEnabled(false);
}
private class pageListener implements OnPageChangeListener{
/**
* 當滑動狀態改變時調用
*/
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
/**
* 噹噹前頁面被滑動時調用
*/
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
/**
* 當新的頁面被選中時調用
*/
@Override
public void onPageSelected(int position) {
// 設置底部小點選中狀態
setCurDot(position);
}
}
private class pointListener implements OnClickListener{
/**
* 經過點擊事件來切換當前的頁面
*/
@Override
public void onClick(View v) {
int position = (Integer) v.getTag();
setCurView(position);
setCurDot(position);
}
}
/**
* 設置當前頁面的位置
*/
private void setCurView(int position) {
if (position < 0 || position >= pics.length) {
return;
}
viewPager.setCurrentItem(position);
}
/**
* 設置當前的小點的位置
*/
private void setCurDot(int positon){
if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {
return;
}
points[positon].setEnabled(false);
points[currentIndex].setEnabled(true);
currentIndex = positon;
}
}
代碼連接:http://pan.baidu.com/share/link?shareid=3328974888&uk=3909095065
本文轉自:http://www.apkbus.com/android-125505-1-1.html?from=threadlink