AndroidUI设计之ViewPaper详解

本文转自:http://blog.csdn.net/eclipsexys/article/details/9346211

ViewPager类提供了多界面切换的新效果,是谷歌在3.0之后加入的新特性,所以在使用时需要引用android.support.v4.view.ViewPager。

本次需要实现一个软件的一个通用部分--引导界面。

主程序:

  1. package com.xys.vf;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.os.Bundle;  
  7. import android.support.v4.view.ViewPager;  
  8. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  9. import android.view.View;  
  10. import android.view.View.OnClickListener;  
  11. import android.widget.ImageView;  
  12. import android.widget.LinearLayout;  
  13.   
  14. /** 
  15.  * 功能描述:主程序入口类 
  16.  */  
  17. public class MainActivity extends Activity implements OnClickListener,  
  18.         OnPageChangeListener {  
  19.     // 定义ViewPager对象  
  20.     private ViewPager viewPager;  
  21.   
  22.     // 定义ViewPager适配器  
  23.     private ViewPagerAdapter vpAdapter;  
  24.   
  25.     // 定义一个ArrayList来存放View  
  26.     private ArrayList<View> views;  
  27.   
  28.     // 引导图片资源  
  29.     private static final int[] pics = { R.drawable.guide1, R.drawable.guide2,  
  30.             R.drawable.guide3, R.drawable.guide4 };  
  31.   
  32.     // 底部小点的图片  
  33.     private ImageView[] points;  
  34.   
  35.     // 记录当前选中位置  
  36.     private int currentIndex;  
  37.   
  38.     @Override  
  39.     protected void onCreate(Bundle savedInstanceState) {  
  40.         super.onCreate(savedInstanceState);  
  41.         setContentView(R.layout.activity_main);  
  42.   
  43.         // 初始化组件  
  44.         initView();  
  45.         // 初始化数据  
  46.         initData();  
  47.     }  
  48.   
  49.     /** 
  50.      * 初始化组件 
  51.      */  
  52.     private void initView() {  
  53.         // 实例化ArrayList对象  
  54.         views = new ArrayList<View>();  
  55.   
  56.         // 实例化ViewPager  
  57.         viewPager = (ViewPager) findViewById(R.id.viewpager);  
  58.   
  59.         // 实例化ViewPager适配器  
  60.         vpAdapter = new ViewPagerAdapter(views);  
  61.     }  
  62.   
  63.     /** 
  64.      * 初始化数据 
  65.      */  
  66.     private void initData() {  
  67.         // 定义一个布局并设置参数  
  68.         LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(  
  69.                 LinearLayout.LayoutParams.FILL_PARENT,  
  70.                 LinearLayout.LayoutParams.FILL_PARENT);  
  71.   
  72.         // 初始化引导图片列表  
  73.         for (int i = 0; i < pics.length; i++) {  
  74.             ImageView iv = new ImageView(this);  
  75.             iv.setLayoutParams(mParams);  
  76.             iv.setImageResource(pics[i]);  
  77.             views.add(iv);  
  78.         }  
  79.   
  80.         // 设置数据  
  81.                 //前面的views中没有数据 在前面的循环中才插入数据 而此时vpAdapter中已经有数据说明   
  82.                 //初始化adapter的时候 参数传递是传引用  
  83.         viewPager.setAdapter(vpAdapter);  
  84.         // 设置监听  
  85.         viewPager.setOnPageChangeListener(this);  
  86.   
  87.         // 初始化底部小点  
  88.         initPoint();  
  89.     }  
  90.   
  91.     /** 
  92.      * 初始化底部小点 
  93.      */  
  94.     private void initPoint() {  
  95.         LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);  
  96.   
  97.         points = new ImageView[pics.length];  
  98.   
  99.         // 循环取得小点图片  
  100.         for (int i = 0; i < pics.length; i++) {  
  101.             // 得到一个LinearLayout下面的每一个子元素  
  102.             points[i] = (ImageView) linearLayout.getChildAt(i);  
  103.             // 默认都设为灰色  
  104.             points[i].setEnabled(true);  
  105.             // 给每个小点设置监听  
  106.             points[i].setOnClickListener(this);  
  107.             // 设置位置tag,方便取出与当前位置对应  
  108.             points[i].setTag(i);  
  109.         }  
  110.   
  111.         // 设置当面默认的位置  
  112.         currentIndex = 0;  
  113.         // 设置为白色,即选中状态  
  114.         points[currentIndex].setEnabled(false);  
  115.     }  
  116.   
  117.     /** 
  118.      * 当滑动状态改变时调用 
  119.      */  
  120.     @Override  
  121.     public void onPageScrollStateChanged(int arg0) {  
  122.   
  123.     }  
  124.   
  125.     /** 
  126.      * 当当前页面被滑动时调用 
  127.      */  
  128.   
  129.     @Override  
  130.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  131.   
  132.     }  
  133.   
  134.     /** 
  135.      * 当新的页面被选中时调用 
  136.      */  
  137.   
  138.     @Override  
  139.     public void onPageSelected(int position) {  
  140.         // 设置底部小点选中状态  
  141.         setCurDot(position);  
  142.     }  
  143.   
  144.     /** 
  145.      * 通过点击事件来切换当前的页面 
  146.      */  
  147.     @Override  
  148.     public void onClick(View v) {  
  149.         int position = (Integer) v.getTag();  
  150.         setCurView(position);  
  151.         setCurDot(position);  
  152.     }  
  153.   
  154.     /** 
  155.      * 设置当前页面的位置 
  156.      */  
  157.     private void setCurView(int position) {  
  158.         // 排除异常情况  
  159.         if (position < 0 || position >= pics.length) {  
  160.             return;  
  161.         }  
  162.         viewPager.setCurrentItem(position);  
  163.     }  
  164.   
  165.     /** 
  166.      * 设置当前的小点的位置 
  167.      */  
  168.     private void setCurDot(int positon) {  
  169.         // 排除异常情况  
  170.         if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {  
  171.             return;  
  172.         }  
  173.         points[positon].setEnabled(false);  
  174.         points[currentIndex].setEnabled(true);  
  175.   
  176.         currentIndex = positon;  
  177.     }  
  178.   
  179. }  

数据适配器类:
  1. package com.xys.vf;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.support.v4.view.PagerAdapter;  
  6. import android.support.v4.view.ViewPager;  
  7. import android.view.View;  
  8.   
  9. public class ViewPagerAdapter extends PagerAdapter {  
  10.   
  11.     //界面列表  
  12.     private ArrayList<View> views;  
  13.       
  14.     public ViewPagerAdapter(ArrayList<View> views) {  
  15.         this.views=views;  
  16.     }  
  17.       
  18.     //获得当前界面总数  
  19.     @Override  
  20.     public int getCount() {  
  21.         // TODO Auto-generated method stub  
  22.         if(views!=null){  
  23.             return views.size();  
  24.         }  
  25.         return 0;  
  26.     }  
  27.   
  28.     //初始化position位置的界面  
  29.     @Override  
  30.     public Object instantiateItem(View view, int position) {  
  31.         // TODO Auto-generated method stub  
  32.         ((ViewPager)view).addView(views.get(position),0);  
  33.         return views.get(position);  
  34.     }  
  35.   
  36.     //判断是否由对象生成界面  
  37.     @Override  
  38.     public boolean isViewFromObject(View arg0, Object arg1) {  
  39.         // TODO Auto-generated method stub  
  40.         return arg0==arg1;  
  41.           
  42.     }  
  43.   
  44.     //销毁position位置的界面  
  45.     @Override  
  46.     public void destroyItem(View view, int position, Object arg2) {  
  47.         ((ViewPager) view).removeView(views.get(position));         
  48.     }  
  49.       
  50.     /** 
  51.      * @param args 
  52.      */  
  53.     public static void main(String[] args) {  
  54.         // TODO Auto-generated method stub  
  55.   
  56.     }  
  57.   
  58. }  

布局类:
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:paddingBottom="@dimen/activity_vertical_margin"  
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  7.     android:paddingRight="@dimen/activity_horizontal_margin"  
  8.     android:paddingTop="@dimen/activity_vertical_margin"  
  9.     tools:context=".MainActivity" >  
  10.       
  11.     <android.support.v4.view.ViewPager  
  12.         android:id="@+id/viewpager"  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_gravity="center"/>  
  16.       
  17.     <LinearLayout   
  18.         android:id="@+id/linearLayout"  
  19.         android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content"  
  21.         android:layout_alignParentBottom="true"  
  22.         android:layout_centerHorizontal="true"  
  23.         android:layout_marginBottom="24dip"  
  24.         >  
  25.         <ImageView   
  26.             android:layout_width="wrap_content"  
  27.             android:layout_height="wrap_content"  
  28.             android:clickable="true"  
  29.             android:layout_gravity="center_vertical"  
  30.             android:padding="15dip"  
  31.             android:src="@drawable/point"/>  
  32.         <ImageView   
  33.             android:layout_width="wrap_content"  
  34.             android:layout_height="wrap_content"  
  35.             android:clickable="true"  
  36.             android:layout_gravity="center_vertical"  
  37.             android:padding="15dip"  
  38.             android:src="@drawable/point"/>  
  39.         <ImageView   
  40.             android:layout_width="wrap_content"  
  41.             android:layout_height="wrap_content"  
  42.             android:clickable="true"  
  43.             android:layout_gravity="center_vertical"  
  44.             android:padding="15dip"  
  45.             android:src="@drawable/point"/>  
  46.         <ImageView   
  47.             android:layout_width="wrap_content"  
  48.             android:layout_height="wrap_content"  
  49.             android:clickable="true"  
  50.             android:layout_gravity="center_vertical"  
  51.             android:padding="15dip"  
  52.             android:src="@drawable/point"/>  
  53.     </LinearLayout>  
  54.       
  55. </RelativeLayout>  

主页面下面的小圆点是通过selector来实现的:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <selector  
  3.   xmlns:android="http://schemas.android.com/apk/res/android">  
  4.     <item android:state_enabled="false" android:drawable="@drawable/point_select" />  
  5.     <item android:state_enabled="true" android:drawable="@drawable/point_normal" />  
  6. </selector>  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值