zoukankan      html  css  js  c++  java
  • Android学习之加圆点引导页的实现

    今天周六,在家好好码代码。。。。。

    今天实现的是界面优化的一个简单功能:加圆点的引导页的实现

    虽然简单,不过步骤我们还是一步一步来吧

    第一步:实现几个View之间的左右滑动,我这次用了四个View(ViewPager)

    以下是我的Guide 的布局页面:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent" >
     5     
     6     <android.support.v4.view.ViewPager
     7         android:layout_width="fill_parent"
     8         android:layout_height="fill_parent"
     9         android:id="@+id/viewpager">
    10         
    11     </android.support.v4.view.ViewPager>
    12 
    13 </RelativeLayout>
    View Code

    然后就是实现Guide里面的代码:

     1 package com.oysd.myviewpager;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import android.app.Activity;
     7 import android.content.Intent;
     8 import android.os.Bundle;
     9 import android.support.v4.view.ViewPager;
    10 import android.support.v4.view.ViewPager.OnPageChangeListener;
    11 import android.view.LayoutInflater;
    12 import android.view.View;
    13 import android.view.View.OnClickListener;
    14 import android.widget.Button;
    15 import android.widget.ImageView;
    16 
    17 public class Guide extends Activity implements OnPageChangeListener {
    18     
    19     private ViewPager vp;
    20     private ViewPagerAdapter vpAdapter;
    21     private List<View> views;
    22 
    23     @Override
    24     protected void onCreate(Bundle savedInstanceState) {
    25         // TODO Auto-generated method stub
    26         super.onCreate(savedInstanceState);
    27         setContentView(R.layout.activity_guide);
    28         initView();
    29     }
    30     
    31     /**
    32      * 初始化View
    33      */
    34     private void initView(){
    35         LayoutInflater inflater = LayoutInflater.from(this);
    36         views = new ArrayList<View>();
    37                 // 添加四个View
    38         views.add(inflater.inflate(R.layout.one, null));
    39         views.add(inflater.inflate(R.layout.two, null));
    40         views.add(inflater.inflate(R.layout.three, null));
    41         views.add(inflater.inflate(R.layout.four, null));
    42         
    43         vpAdapter = new ViewPagerAdapter(views, this);
    44         vp = (ViewPager) findViewById(R.id.viewpager);
    45         vp.setAdapter(vpAdapter);//将vpAdapter 与vp控件绑定
    46     }
    47 }
    View Code

    以上需要自己手动再次创四个布局文件one.xml two.xml  three.xml  four.xml

    我这里就给出前面三个的其中一个吧,其他三个只是src的图片不一样而已:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6     
     7     <ImageView 
     8         android:layout_width="fill_parent"
     9         android:layout_height="fill_parent"
    10         android:background="@drawable/one"/>
    11 
    12 </LinearLayout>
    View Code

    以下是第四个four.xml的布局文件,多了一个进入 的按钮:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent">
     5     
     6     <ImageView 
     7         android:layout_width="fill_parent"
     8         android:layout_height="fill_parent"
     9         android:background="@drawable/four"/>
    10     
    11     <LinearLayout 
    12         android:layout_width="fill_parent"
    13         android:layout_height="wrap_content"
    14         android:gravity="center_horizontal"
    15         android:layout_alignParentBottom="true"
    16         android:orientation="horizontal">
    17         
    18         <Button 
    19             android:layout_width="wrap_content"
    20             android:layout_height="wrap_content"
    21             android:id="@+id/btnStart"
    22             android:text="进入"/>
    23         
    24     </LinearLayout>
    25 
    26 </RelativeLayout>
    View Code

    这里面需要自己实现ViewPagerAdapter,以下是实现代码:

     1 package com.oysd.myviewpager;
     2 
     3 import java.util.List;
     4 
     5 import android.content.Context;
     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     private List<View> views;
    13     private Context context;
    14     
    15     public ViewPagerAdapter(List<View> views , Context context) {
    16         this.views = views;
    17         this.context = context;
    18     }
    19     
    20     @Override
    21     public void destroyItem(View container, int position, Object object) {
    22         ((ViewPager)container).removeView(views.get(position));
    23     }
    24     
    25     @Override
    26     public Object instantiateItem(View container, int position) {
    27         // TODO Auto-generated method stub
    28         ((ViewPager) container).addView(views.get(position));
    29         
    30         return views.get(position);
    31     }
    32     
    33     @Override
    34     public int getCount() {
    35         // TODO Auto-generated method stub
    36         return views.size();
    37     }
    38 
    39     @Override
    40     public boolean isViewFromObject(View arg0, Object arg1) {
    41         // TODO Auto-generated method stub
    42         return arg0 == arg1;
    43     }
    44 
    45 }
    View Code

    这个Adapter的实现不外乎就是实现这个方法:getCount、isViewFromObject、destroyItem、instantiateItem
    和View中的Adapter其实差不多:

    getCount():返回的是数据源对象的个数,即列表项数

    Object getItem(int position):返回指定位置position上的列表

     long getItemId(int position):返回指定位置处的行ID

     View getView():返回列表项对应的视图

    好了,废话先不多说了,第一步的视图之间的滑动基本上完成了

    第二步:添加圆点,来标识一下当前view以及view的总过数量,以及在最后一个View上面添加一个进入主页面的按钮

    在Guide的原先布局下进行改动,改动之后的布局文件是(完整的):

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent" >
     5     
     6     <android.support.v4.view.ViewPager
     7         android:layout_width="fill_parent"
     8         android:layout_height="fill_parent"
     9         android:id="@+id/viewpager">
    10         
    11     </android.support.v4.view.ViewPager>
    12     
    13     <LinearLayout 
    14         android:layout_width="fill_parent"
    15         android:layout_height="wrap_content"
    16         android:id="@+id/ll"
    17         android:orientation="horizontal"
    18         android:gravity="center_horizontal"
    19         android:layout_alignParentBottom="true">
    20         
    21         <ImageView 
    22             android:layout_width="wrap_content"
    23             android:layout_height="wrap_content"
    24             android:id="@+id/iv1"
    25             android:src="@drawable/white_dot"/>
    26         <ImageView 
    27             android:layout_width="wrap_content"
    28             android:layout_height="wrap_content"
    29             android:id="@+id/iv2"
    30             android:src="@drawable/dark_dot"/>
    31         <ImageView 
    32             android:layout_width="wrap_content"
    33             android:layout_height="wrap_content"
    34             android:id="@+id/iv3"
    35             android:src="@drawable/dark_dot"/>
    36         <ImageView 
    37             android:layout_width="wrap_content"
    38             android:layout_height="wrap_content"
    39             android:id="@+id/iv4"
    40             android:src="@drawable/dark_dot"/>
    41     </LinearLayout>
    42 
    43 </RelativeLayout>
    View Code

    然后Guide的改动,改动之后的代码如下:

      1 package com.oysd.myviewpager;
      2 
      3 import java.util.ArrayList;
      4 import java.util.List;
      5 
      6 import android.app.Activity;
      7 import android.content.Intent;
      8 import android.os.Bundle;
      9 import android.support.v4.view.ViewPager;
     10 import android.support.v4.view.ViewPager.OnPageChangeListener;
     11 import android.view.LayoutInflater;
     12 import android.view.View;
     13 import android.view.View.OnClickListener;
     14 import android.widget.Button;
     15 import android.widget.ImageView;
     16 
     17 public class Guide extends Activity implements OnPageChangeListener {
     18     
     19     private ViewPager vp;
     20     private ViewPagerAdapter vpAdapter;
     21     private List<View> views;
     22     private Button btnStart;
     23     private ImageView dots[];
     24     private int ids[] = {R.id.iv1,
     25                          R.id.iv2,
     26                          R.id.iv3,
     27                          R.id.iv4};
     28     
     29     
     30     @Override
     31     protected void onCreate(Bundle savedInstanceState) {
     32         // TODO Auto-generated method stub
     33         super.onCreate(savedInstanceState);
     34         setContentView(R.layout.activity_guide);
     35         initView();
     36         initDots();
     37     }
     38     
     39     /**
     40      * 初始化View
     41      */
     42     private void initView(){
     43         LayoutInflater inflater = LayoutInflater.from(this);
     44         views = new ArrayList<View>();
     45         views.add(inflater.inflate(R.layout.one, null));
     46         views.add(inflater.inflate(R.layout.two, null));
     47         views.add(inflater.inflate(R.layout.three, null));
     48         views.add(inflater.inflate(R.layout.four, null));
     49         
     50         vpAdapter = new ViewPagerAdapter(views, this);
     51         btnStart = (Button) views.get(3).findViewById(R.id.btnStart);
     52         btnStart.setOnClickListener(new OnClickListener() {
     53             
     54             @Override
     55             public void onClick(View v) {
     56                 // TODO Auto-generated method stub
     57                 Intent intent = new Intent(Guide.this , MainActivity.class);
     58                 startActivity(intent);
     59                 finish();
     60             }
     61         });
     62         
     63         vp = (ViewPager) findViewById(R.id.viewpager);
     64         vp.setAdapter(vpAdapter);//将vpAdapter 与vp控件绑定
     65         vp.setOnPageChangeListener(this);//添加回调
     66     }
     67     
     68     /**
     69      * 初始化小圆点控件
     70      */
     71     private void initDots(){
     72         
     73         dots = new ImageView[views.size()];
     74         for(int i = 0 ; i < ids.length ; i++){
     75             dots[i] = (ImageView) findViewById(ids[i]);
     76         }
     77         
     78     }
     79 
     80     /**
     81      * 当滑动状态被改变的时候调用
     82      */
     83     @Override
     84     public void onPageScrollStateChanged(int arg0) {
     85         // TODO Auto-generated method stub
     86         
     87     }
     88 
     89     /**
     90      * 当页面滑动的时候调用
     91      */
     92     @Override
     93     public void onPageScrolled(int arg0, float arg1, int arg2) {
     94         // TODO Auto-generated method stub
     95         
     96     }
     97 
     98     /**
     99      * 当页面被选择的时候调用
    100      */
    101     @Override
    102     public void onPageSelected(int arg0) {
    103         // TODO Auto-generated method stub
    104         for(int i = 0 ; i < ids.length ; i++){
    105             //当此页面被选择的时候,将小圆点设置成亮点(white_dot)
    106             //其他小圆点设置成黑点
    107             if(arg0 == i){
    108                 dots[i].setImageResource(R.drawable.white_dot);
    109             }else{
    110                 dots[i].setImageResource(R.drawable.dark_dot);
    111             }
    112         }
    113     }
    114 }
    View Code


    到这里,圆点以及进入按钮的添加也基本上完成了。

    第三步:实现判断用户是否是第一次进入手机应用,如果是第一次跳转到引导页面,如果不是,直接跳转到主页面

    额外添加一个Welcome 的Activity,以下是布局文件(仅仅是用一个ImageView来显示以下图片):

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6     
     7     <ImageView 
     8         android:layout_width="fill_parent"
     9         android:layout_height="fill_parent"
    10         android:src="@drawable/welcome"/>
    11 </LinearLayout>
    View Code


    然后就是实现Welcom里面的代码了:

     1 package com.oysd.myviewpager;
     2 
     3 import android.app.Activity;
     4 import android.content.Intent;
     5 import android.content.SharedPreferences;
     6 import android.content.SharedPreferences.Editor;
     7 import android.os.Bundle;
     8 import android.os.Handler;
     9 
    10 public class Welcome extends Activity {
    11     
    12     private static final int TIME = 2000;//设置跳转的延迟时间
    13     private static final int GO_HOME = 1000;//设置跳转到主页面的识别代码
    14     private static final int GO_GUIDE = 1001;//设置跳转到引导页面的识别代码
    15     private boolean isFirstIn = false;//判断用户是否是第一次进入
    16     
    17     private Handler mHandler = new Handler(){
    18         
    19         public void handleMessage(android.os.Message msg) {
    20             
    21             switch(msg.what){
    22             case GO_HOME:
    23                 goHome();
    24                 break;
    25             case GO_GUIDE:
    26                 goGuide();
    27                 break;
    28             }
    29         };
    30     };
    31     
    32     @Override
    33     protected void onCreate(Bundle savedInstanceState) {
    34         // TODO Auto-generated method stub
    35         super.onCreate(savedInstanceState);
    36         setContentView(R.layout.activity_welcome);
    37         init();
    38     }
    39     
    40     private void init(){
    41         
    42         SharedPreferences preferences = getSharedPreferences("oy", MODE_PRIVATE);
    43         isFirstIn = preferences.getBoolean("flag", true);
    44         if(!isFirstIn){
    45             mHandler.sendEmptyMessageDelayed(GO_HOME, TIME);
    46         }else{
    47             mHandler.sendEmptyMessageDelayed(GO_GUIDE, TIME);
    48             Editor editor = preferences.edit();//给予修改的权限
    49             editor.putBoolean("flag", false);//修改isFirstIn的值
    50             editor.commit();//修改完之后进行提交
    51             
    52         }
    53     }
    54     /**
    55      * 执行跳转到主页面
    56      */
    57     private void goHome(){
    58         Intent intent = new Intent(Welcome.this , MainActivity.class);
    59         startActivity(intent);
    60         finish();
    61     }
    62     
    63     /**
    64      * 执行跳转到引导页面
    65      */
    66     private void goGuide(){
    67         Intent intent = new Intent(Welcome.this , Guide.class);
    68         startActivity(intent);
    69         finish();
    70     }
    71 
    72 }
    View Code


    到这里,这个小功能也成功完成了。

    以下附上AndroidMainifest.xml文件:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.oysd.myviewpager"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="14"
     9         android:targetSdkVersion="14" />
    10 
    11     <application
    12         android:allowBackup="true"
    13         android:icon="@drawable/ic_launcher"
    14         android:label="@string/app_name"
    15         android:theme="@style/AppTheme" >
    16         <activity
    17             android:name=".MainActivity"
    18             android:label="@string/app_name" >
    19             
    20         </activity>
    21         <activity
    22             android:name="com.oysd.myviewpager.Guide"
    23             android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    24               
    25         </activity>
    26         <activity 
    27             android:name="com.oysd.myviewpager.Welcome"
    28             android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    29             <intent-filter>
    30                 <action android:name="android.intent.action.MAIN" />
    31 
    32                 <category android:name="android.intent.category.LAUNCHER" />
    33             </intent-filter> 
    34         </activity>
    35     </application>
    36 
    37 </manifest>
    View Code

    简单也要坚持。。。。。

  • 相关阅读:
    [题解]luogu_P4198_楼房重建(线段树logn合并
    [题解]luogu_P3084(单调队列dp
    [题解]luogu_P3084(差分约束/梦想spfa
    [题解/模板]POJ_1201(差分约束
    [题解]luogu_P5059(矩乘
    [题解]luogu_P5004跳房子2(矩乘递推
    CF1042A Benches(二分答案)
    8.24考试总结
    NOIP2017题目
    「LG3045」「USACO12FEB」牛券Cow Coupons
  • 原文地址:https://www.cnblogs.com/ouyangduoduo/p/4620929.html
Copyright © 2011-2022 走看看