转android的UI设计二

来源:互联网 发布:声优赚钱软件 编辑:程序博客网 时间:2024/05/24 07:43

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8983770

       

       本系列文章都会以一个程序的实例开发为主线来进行讲解,以求达到一个循序渐进的学习效果,这样更能加深大家对于程序为什么要这样写的用意,理论加上实际的应用才能达到事半功倍的效果,不是吗?

       最下方有源码的下载地址,几乎源码的每一行都有注释,写的通俗易懂,非常清晰,如有不懂的可以留言,本博主一定尽心尽力,为大家答题解惑,希望大家多多支持,好的,话不多说,让我们回归到今天的正题。


一、实现的效果图


        也许是养成了这样一个习惯,每次看别人的代码前,必须要先看实现的效果图达到了一个什么样的效果,是不是跟自己想要实现的效果类似,有图才有真相嘛,呵呵。






二、编码前的准备工作


       ViewPager是Android3.0之后提供的新特性,所以要想让你的应用向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自google提供的一个附加包。大家搜下即可。


三、项目结构图




四、具体的编码实现


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

[html] view plaincopy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content">  
  5.   
  6.      <android.support.v4.view.ViewPager  
  7.         android:id="@+id/viewpager"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="fill_parent" />  
  10.   
  11.      <LinearLayout  
  12.         android:id="@+id/ll"  
  13.         android:layout_width="wrap_content"  
  14.         android:layout_height="wrap_content"  
  15.         android:layout_alignParentBottom="true"  
  16.         android:layout_centerHorizontal="true"  
  17.         android:layout_marginBottom="24.0dip"  
  18.         android:orientation="horizontal">  
  19.    
  20.         <ImageView  
  21.             android:layout_width="wrap_content"  
  22.             android:layout_height="wrap_content"  
  23.             android:layout_gravity="center_vertical"  
  24.             android:clickable="true"  
  25.             android:padding="15.0dip"  
  26.             android:src="@drawable/point"/>  
  27.         <ImageView  
  28.             android:layout_width="wrap_content"  
  29.             android:layout_height="wrap_content"  
  30.             android:layout_gravity="center_vertical"  
  31.             android:clickable="true"  
  32.             android:padding="15.0dip"  
  33.             android:src="@drawable/point"/>  
  34.         <ImageView  
  35.             android:layout_width="wrap_content"  
  36.             android:layout_height="wrap_content"  
  37.             android:layout_gravity="center_vertical"  
  38.             android:clickable="true"  
  39.             android:padding="15.0dip"  
  40.             android:src="@drawable/point"/>  
  41.         <ImageView  
  42.             android:layout_width="wrap_content"  
  43.             android:layout_height="wrap_content"  
  44.             android:layout_gravity="center_vertical"  
  45.             android:clickable="true"  
  46.             android:padding="15.0dip"  
  47.             android:src="@drawable/point"/>  
  48.     </LinearLayout>  
  49. </RelativeLayout>  
2、其中小点的图片用一个selector来控制颜色point.xml:

[html] view plaincopy
  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/point_normal" />  
  5.     <item android:state_enabled="false" android:drawable="@drawable/point_select" />  
  6. </selector>  
3、 ViewPager适配器代码,ViewPagerAdapter.java:

[java] view plaincopy
  1. package com.yangyu;  
  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. /** 
  10.  * @author yangyu 
  11.  *  功能描述:ViewPager适配器,用来绑定数据和view 
  12.  */  
  13. public class ViewPagerAdapter extends PagerAdapter {  
  14.       
  15.     //界面列表  
  16.     private ArrayList<View> views;  
  17.       
  18.     public ViewPagerAdapter (ArrayList<View> views){  
  19.         this.views = views;  
  20.     }  
  21.          
  22.     /** 
  23.      * 获得当前界面数 
  24.      */  
  25.     @Override  
  26.     public int getCount() {  
  27.          if (views != null) {  
  28.              return views.size();  
  29.          }        
  30.          return 0;  
  31.     }  
  32.   
  33.     /** 
  34.      * 初始化position位置的界面 
  35.      */  
  36.     @Override  
  37.     public Object instantiateItem(View view, int position) {  
  38.          
  39.         ((ViewPager) view).addView(views.get(position), 0);  
  40.          
  41.         return views.get(position);  
  42.     }  
  43.       
  44.     /** 
  45.      * 判断是否由对象生成界面 
  46.      */  
  47.     @Override  
  48.     public boolean isViewFromObject(View view, Object arg1) {  
  49.         return (view == arg1);  
  50.     }  
  51.   
  52.     /** 
  53.      * 销毁position位置的界面 
  54.      */  
  55.     @Override  
  56.     public void destroyItem(View view, int position, Object arg2) {  
  57.         ((ViewPager) view).removeView(views.get(position));         
  58.     }  
  59. }  
4、主程序入口类,MainActivity.java:

[java] view plaincopy
  1. package com.yangyu;  
  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. import com.example.myguideview01.R;  
  15.   
  16. /** 
  17.  * @author yangyu 
  18.  *  功能描述:主程序入口类 
  19.  */  
  20. public class MainActivity extends Activity implements OnClickListener,OnPageChangeListener {  
  21.     //定义ViewPager对象  
  22.     private ViewPager viewPager;  
  23.       
  24.     //定义ViewPager适配器  
  25.     private ViewPagerAdapter vpAdapter;  
  26.       
  27.     //定义一个ArrayList来存放View  
  28.     private ArrayList<View> views;  
  29.   
  30.     //引导图片资源  
  31.         private static final int[] pics = {R.drawable.guide1,R.drawable.guide2,R.drawable.guide3,R.drawable.guide4};  
  32.       
  33.         //底部小点的图片  
  34.         private ImageView[] points;  
  35.       
  36.         //记录当前选中位置  
  37.         private int currentIndex;  
  38.       
  39.     @Override  
  40.     protected void onCreate(Bundle savedInstanceState) {  
  41.         super.onCreate(savedInstanceState);  
  42.         setContentView(R.layout.activity_main);  
  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(LinearLayout.LayoutParams.FILL_PARENT,  
  69.                                                                           LinearLayout.LayoutParams.FILL_PARENT);  
  70.          
  71.         //初始化引导图片列表  
  72.         for(int i=0; i<pics.length; i++) {  
  73.             ImageView iv = new ImageView(this);  
  74.             iv.setLayoutParams(mParams);  
  75.             iv.setImageResource(pics[i]);  
  76.             views.add(iv);  
  77.         }   
  78.           
  79.         //设置数据  
  80.         viewPager.setAdapter(vpAdapter);  
  81.         //设置监听  
  82.         viewPager.setOnPageChangeListener(this);  
  83.           
  84.         //初始化底部小点  
  85.         initPoint();  
  86.     }  
  87.       
  88.     /** 
  89.      * 初始化底部小点 
  90.      */  
  91.     private void initPoint(){  
  92.         LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll);         
  93.           
  94.         points = new ImageView[pics.length];  
  95.   
  96.         //循环取得小点图片  
  97.         for (int i = 0; i < pics.length; i++) {  
  98.             //得到一个LinearLayout下面的每一个子元素  
  99.             points[i] = (ImageView) linearLayout.getChildAt(i);  
  100.             //默认都设为灰色  
  101.             points[i].setEnabled(true);  
  102.             //给每个小点设置监听  
  103.             points[i].setOnClickListener(this);  
  104.             //设置位置tag,方便取出与当前位置对应  
  105.             points[i].setTag(i);  
  106.         }  
  107.           
  108.         //设置当面默认的位置  
  109.         currentIndex = 0;  
  110.         //设置为白色,即选中状态  
  111.         points[currentIndex].setEnabled(false);  
  112.     }  
  113.       
  114.     /** 
  115.      * 当滑动状态改变时调用 
  116.      */  
  117.     @Override  
  118.     public void onPageScrollStateChanged(int arg0) {  
  119.   
  120.     }  
  121.       
  122.     /** 
  123.      * 当当前页面被滑动时调用 
  124.      */  
  125.   
  126.     @Override  
  127.     public void onPageScrolled(int arg0, float arg1, int arg2) {  
  128.   
  129.     }  
  130.       
  131.     /** 
  132.      * 当新的页面被选中时调用 
  133.      */  
  134.   
  135.     @Override  
  136.     public void onPageSelected(int position) {  
  137.         //设置底部小点选中状态  
  138.         setCurDot(position);  
  139.     }  
  140.   
  141.     /** 
  142.      * 通过点击事件来切换当前的页面 
  143.      */  
  144.     @Override  
  145.     public void onClick(View v) {  
  146.          int position = (Integer)v.getTag();  
  147.          setCurView(position);  
  148.          setCurDot(position);         
  149.     }  
  150.   
  151.     /** 
  152.      * 设置当前页面的位置 
  153.      */  
  154.     private void setCurView(int position){  
  155.          if (position < 0 || position >= pics.length) {  
  156.              return;  
  157.          }  
  158.          viewPager.setCurrentItem(position);  
  159.      }  
  160.   
  161.      /** 
  162.      * 设置当前的小点的位置 
  163.      */  
  164.     private void setCurDot(int positon){  
  165.          if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {  
  166.              return;  
  167.          }  
  168.          points[positon].setEnabled(false);  
  169.          points[currentIndex].setEnabled(true);  
  170.   
  171.          currentIndex = positon;  
  172.      }    
  173. }  

         这篇主要是让大家能够实现一个简单的例子,让你的程序先动起来,才有信心和勇气挑战更复杂的UI设计和开发,在后面的几篇章节中,博主也会以同样生动和富有激情的讲解,给大家带来更加的复杂的演示和代码,如仿微信、和人人网的引导界面的开发,加入了动画的效果,运行起来也会更炫一点。


源码下载地址

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微店快件丢失怎么办 ems档案丢了怎么办 ems 信 丢了怎么办 办快递代收点怎么办 淘宝退货退款取消怎么办 淘宝卖家不给退款怎么办 商家退货不退款怎么办 专卖店不给退怎么办 理发店顾客钱收少了怎么办 淘宝店铺搜不到怎么办 淘宝客服不在线怎么办 淘宝售后服务客服帮着卖家怎么办 老公一年找不到工作怎么办 淘宝店家跑了怎么办 淘宝卖家跑了怎么办啊 没发货退不了怎么办 微信上遇到诈骗怎么办 拼多多二级处罚怎么办 淘宝售后过了怎么办 遇到耍无赖的人怎么办 欠钱耍无赖得怎么办 借钱不还耍无赖怎么办 淘宝开食品店证件怎么办 手机卡掉了话费怎么办 手机变板砖怎么办 10086短信收不到怎么办 苹果手机成砖头怎么办 手机死砖了怎么办 苹果电脑成砖了怎么办 苹果误充游戏怎么办 话费如果交错了怎么办 联通充错号码怎么办 淘宝店铺假流量怎么办 空号交错话费怎么办 微信上被骗4800怎么办 移动手机号空号怎么办 微信充值充错号码对方是空号怎么办 买了运险费退货怎么办 手机玩吃鸡有点卡怎么办 微信手机充值充到空号怎么办 用微信交话费交错了怎么办