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
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值