android UI进阶之用ViewPager实现欢迎引导页面

http://blog.csdn.net/notice520/article/details/7454568/

ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包。大家搜下即可。

ViewPager主要用来组织一组数据,并且通过左右滑动的方式来展示。

现在的大多数应用都会有一个欢迎引导页面,如图所示,通过左右滑动来告知用户一些功能特性。


这个引导图效果用ViewPager可以很轻松的实现。

正如前面所说,ViewPager是用来展示一组数据的,所以肯定需要Adapter来绑定数据和view。先写一个Adapter:

  1. package com.notice.viewpagerd;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.os.Parcelable;  
  6. import android.support.v4.view.PagerAdapter;  
  7. import android.support.v4.view.ViewPager;  
  8. import android.view.View;  
  9.   
  10. public class ViewPagerAdapter extends PagerAdapter{  
  11.       
  12.     //界面列表  
  13.     private List<View> views;  
  14.       
  15.     public ViewPagerAdapter (List<View> views){  
  16.         this.views = views;  
  17.     }  
  18.   
  19.     //销毁arg1位置的界面  
  20.     @Override  
  21.     public void destroyItem(View arg0, int arg1, Object arg2) {  
  22.         ((ViewPager) arg0).removeView(views.get(arg1));       
  23.     }  
  24.   
  25.     @Override  
  26.     public void finishUpdate(View arg0) {  
  27.         // TODO Auto-generated method stub  
  28.           
  29.     }  
  30.   
  31.     //获得当前界面数  
  32.     @Override  
  33.     public int getCount() {  
  34.         if (views != null)  
  35.         {  
  36.             return views.size();  
  37.         }  
  38.           
  39.         return 0;  
  40.     }  
  41.       
  42.   
  43.     //初始化arg1位置的界面  
  44.     @Override  
  45.     public Object instantiateItem(View arg0, int arg1) {  
  46.           
  47.         ((ViewPager) arg0).addView(views.get(arg1), 0);  
  48.           
  49.         return views.get(arg1);  
  50.     }  
  51.   
  52.     //判断是否由对象生成界面  
  53.     @Override  
  54.     public boolean isViewFromObject(View arg0, Object arg1) {  
  55.         return (arg0 == arg1);  
  56.     }  
  57.   
  58.     @Override  
  59.     public void restoreState(Parcelable arg0, ClassLoader arg1) {  
  60.         // TODO Auto-generated method stub  
  61.           
  62.     }  
  63.   
  64.     @Override  
  65.     public Parcelable saveState() {  
  66.         // TODO Auto-generated method stub  
  67.         return null;  
  68.     }  
  69.   
  70.     @Override  
  71.     public void startUpdate(View arg0) {  
  72.         // TODO Auto-generated method stub  
  73.           
  74.     }  
  75.   
  76. }  


这里我们要绑定的每一个item就是一个引导界面,我们用一个list来保存。

通过继承PagerAdapter,并实现几个我写注释的方法即可。

布局界面比较简单,加入ViewPager组件,以及底部的引导小点:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <android.support.v4.view.ViewPager  
  8.         android:id="@+id/viewpager"  
  9.         android:layout_width="fill_parent"   
  10.         android:layout_height="fill_parent"   
  11.         />      
  12.       
  13.       
  14.     <LinearLayout   
  15.         android:id="@+id/ll"   
  16.         android:orientation="horizontal"   
  17.         android:layout_width="wrap_content"   
  18.         android:layout_height="wrap_content"   
  19.         android:layout_marginBottom="24.0dip"   
  20.         android:layout_alignParentBottom="true"   
  21.         android:layout_centerHorizontal="true">  
  22.           
  23.         <ImageView  
  24.             android:layout_width="wrap_content"  
  25.             android:layout_height="wrap_content"  
  26.             android:layout_gravity="center_vertical"  
  27.             android:clickable="true"  
  28.             android:padding="15.0dip"  
  29.             android:src="@drawable/dot" />  
  30.   
  31.         <ImageView  
  32.             android:layout_width="wrap_content"  
  33.             android:layout_height="wrap_content"  
  34.             android:layout_gravity="center_vertical"  
  35.             android:clickable="true"  
  36.             android:padding="15.0dip"  
  37.             android:src="@drawable/dot" />  
  38.   
  39.         <ImageView  
  40.             android:layout_width="wrap_content"  
  41.             android:layout_height="wrap_content"  
  42.             android:layout_gravity="center_vertical"  
  43.             android:clickable="true"  
  44.             android:padding="15.0dip"  
  45.             android:src="@drawable/dot" />  
  46.   
  47.         <ImageView  
  48.             android:layout_width="wrap_content"  
  49.             android:layout_height="wrap_content"  
  50.             android:layout_gravity="center_vertical"  
  51.             android:clickable="true"  
  52.             android:padding="15.0dip"  
  53.             android:src="@drawable/dot" />  
  54.   
  55.     </LinearLayout>  
  56.   
  57. </RelativeLayout>  

其中小点的图片用一个selector来控制颜色(设置item的enable为true或者false)

dot.xml:

  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="true" android:drawable="@drawable/dark_dot" />  
  5.     <item android:state_enabled="false" android:drawable="@drawable/white_dot" />  
  6. </selector>  


下面就是写Activity了。

  1. package com.notice.viewpagerd;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.support.v4.view.ViewPager;  
  9. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.ImageView;  
  13. import android.widget.LinearLayout;  
  14.   
  15. public class ViewPagerDemoActivity extends Activity implements OnClickListener, OnPageChangeListener{  
  16.       
  17.     private ViewPager vp;  
  18.     private ViewPagerAdapter vpAdapter;  
  19.     private List<View> views;  
  20.       
  21.     //引导图片资源  
  22.     private static final int[] pics = { R.drawable.whatsnew_00,  
  23.             R.drawable.whatsnew_01, R.drawable.whatsnew_02,  
  24.             R.drawable.whatsnew_03 };  
  25.       
  26.     //底部小店图片  
  27.     private ImageView[] dots ;  
  28.       
  29.     //记录当前选中位置  
  30.     private int currentIndex;  
  31.       
  32.     /** Called when the activity is first created. */  
  33.     @Override  
  34.     public void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.main);  
  37.           
  38.         views = new ArrayList<View>();  
  39.          
  40.         LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,  
  41.                 LinearLayout.LayoutParams.WRAP_CONTENT);  
  42.           
  43.         //初始化引导图片列表  
  44.         for(int i=0; i<pics.length; i++) {  
  45.             ImageView iv = new ImageView(this);  
  46.             iv.setLayoutParams(mParams);  
  47.             iv.setImageResource(pics[i]);  
  48.             views.add(iv);  
  49.         }  
  50.         vp = (ViewPager) findViewById(R.id.viewpager);  
  51.         //初始化Adapter  
  52.         vpAdapter = new ViewPagerAdapter(views);  
  53.         vp.setAdapter(vpAdapter);  
  54.         //绑定回调  
  55.         vp.setOnPageChangeListener(this);  
  56.           
  57.         //初始化底部小点  
  58.         initDots();  
  59.           
  60.     }  
  61.       
  62.     private void initDots() {  
  63.         LinearLayout ll = (LinearLayout) findViewById(R.id.ll);  
  64.   
  65.         dots = new ImageView[pics.length];  
  66.   
  67.         //循环取得小点图片  
  68.         for (int i = 0; i < pics.length; i++) {  
  69.             dots[i] = (ImageView) ll.getChildAt(i);  
  70.             dots[i].setEnabled(true);//都设为灰色  
  71.             dots[i].setOnClickListener(this);  
  72.             dots[i].setTag(i);//设置位置tag,方便取出与当前位置对应  
  73.         }  
  74.   
  75.         currentIndex = 0;  
  76.         dots[currentIndex].setEnabled(false);//设置为白色,即选中状态  
  77.     }  
  78.       
  79.     /** 
  80.      *设置当前的引导页  
  81.      */  
  82.     private void setCurView(int position)  
  83.     {  
  84.         if (position < 0 || position >= pics.length) {  
  85.             return;  
  86.         }  
  87.   
  88.         vp.setCurrentItem(position);  
  89.     }  
  90.   
  91.     /** 
  92.      *这只当前引导小点的选中  
  93.      */  
  94.     private void setCurDot(int positon)  
  95.     {  
  96.         if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {  
  97.             return;  
  98.         }  
  99.   
  100.         dots[positon].setEnabled(false);  
  101.         dots[currentIndex].setEnabled(true);  
  102.   
  103.         currentIndex = positon;  
  104.     }  
  105.   
  106.     //当滑动状态改变时调用  
  107.     @Override  
  108.     public void onPageScrollStateChanged(int arg0) {  
  109.         // TODO Auto-generated method stub  
  110.           
  111.     }  
  112.   
  113.     //当当前页面被滑动时调用  
  114.     @Override  
  115.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  116.         // TODO Auto-generated method stub  
  117.           
  118.     }  
  119.   
  120.     //当新的页面被选中时调用  
  121.     @Override  
  122.     public void onPageSelected(int arg0) {  
  123.         //设置底部小点选中状态  
  124.         setCurDot(arg0);  
  125.     }  
  126.   
  127.     @Override  
  128.     public void onClick(View v) {  
  129.         int position = (Integer)v.getTag();  
  130.         setCurView(position);  
  131.         setCurDot(position);  
  132.     }  
  133. }  

注意实现OnClickListener, OnPageChangeListener接口,监听小点的点击事件以及viewPager的滑动,在相应的回调方法中设置小点的enable状态,我相信这个部分代码比我讲的清楚,就是判断当前选中的位置对相应的小点进行设置~

可以看到ViewPager还是一个非常简单,也非常实用的一个控件。

有问题欢迎留言交流。


数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值