adnroid——ViewPager制作APP第一次使用时出现的导航介绍

这个已经不是什么新技术了。今天自己写了一次。做个简单的笔记吧。

上代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package com.example.viewpargertest;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

    private ViewPager myViewPager; // 页卡内容

    private List<View> list; // 存放页卡

    private TextView dot1,dot2,dot3;    // 这些点都是文字

    private Button startButton;                 // 按钮,“开始体验”

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        initDot();
        initViewPager();
    }
<!--more-->
    private void initDot(){
        dot1=(TextView) this.findViewById(R.id.textView1);      // 这些点都是文字
        dot2=(TextView) this.findViewById(R.id.textView2);
        dot3=(TextView) this.findViewById(R.id.textView3);
    }

    private void initViewPager(){
        myViewPager=(ViewPager) this.findViewById(R.id.viewPager);
        list=new ArrayList<View>();

        LayoutInflater inflater=getLayoutInflater();

        View view =inflater.inflate(R.layout.lay3, null);  // 只是为了等下 findviewbuid 而独立拿出来赋给 view

        list.add(inflater.inflate(R.layout.lay1, null));
        list.add(inflater.inflate(R.layout.lay2, null));
        list.add(view);

        myViewPager.setAdapter(new MyPagerAdapter(list));

        myViewPager.setOnPageChangeListener(new MyPagerChangeListener());

        startButton=(Button) view.findViewById(R.id.start);      // 与上面对应,获取这个按钮

        startButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Main.class);

                startActivity(intent);

            }
        });

    }

    class MyPagerAdapter extends PagerAdapter {
        public List<View> mListViews;

        public MyPagerAdapter(List<View> mListViews) {
            this.mListViews = mListViews;
        }

        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
            ((ViewPager) arg0).removeView(mListViews.get(arg1));
        }

        @Override
        public void finishUpdate(View arg0) {
        }

        @Override
        public int getCount() {
            return mListViews.size();
        }

        @Override
        public Object instantiateItem(View arg0, int arg1) {
            ((ViewPager) arg0).addView(mListViews.get(arg1), 0);
            return mListViews.get(arg1);
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == (arg1);
        }

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
        }

        @Override
        public Parcelable saveState() {
            return null;
        }

        @Override
        public void startUpdate(View arg0) {
        }
    }

    class MyPagerChangeListener implements OnPageChangeListener{

        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            switch (arg0) {                           // 设置点的颜色
            case 0:
                dot1.setTextColor(Color.WHITE);
                dot2.setTextColor(Color.BLACK);
                dot3.setTextColor(Color.BLACK);
                break;

            case 1:
                dot1.setTextColor(Color.BLACK);
                dot2.setTextColor(Color.WHITE);
                dot3.setTextColor(Color.BLACK);
                break;

            case 2:
                dot1.setTextColor(Color.BLACK);
                dot2.setTextColor(Color.BLACK);
                dot3.setTextColor(Color.WHITE);
                break;

            }
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

    }
}

每个页面都是一张图片,在 xml 定义好几个 file,再把它们都实例化 inflater 为 view, 加入到 list 中。再把 list 加到适配器 PagerAdapter 中。myViewPager 绑定适配器。OK。已经完成了。运行可以手动滑动转页了。

再下来就是那几个导航的点。

上 XML。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="72dp" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="."
            android:textColor="#FFF"
            android:textSize="100dp" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="."
            android:textSize="100dp" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="."
            android:textSize="100dp" />
    </LinearLayout>

</RelativeLayout>

这里我用了 RelativeLayout 布局。目的是为了使这几个导航点叠加在页面图片的上面。

可以看到,其实这几个点都是 TextView。

myViewPager 设置监听 OnPageChangeListener,在页面变化的时候这几个 TextView 变一下颜色就可以了。在最后一个页面卡添加多一个按钮 ”开始体验“。到了最后一个,按一按。就可以开始我的 QQ 空间生活咯。完工。

上图。

 请输入图片描述

 请输入图片描述

 请输入图片描述

这里用到的图都是 QQ 空间客户端截取下来的。有点就是。官方那几个导航点竟然是图片来的。不是动态的。~ 呀~

最后那张图那个按钮是我自己加上去的。官方的是继续向右滑动就进入到主界面。额~ 这个不知道怎么实现。求大牛指点


到此结束。欢迎吐槽。其中这里用到的 PagerAdapter 个人还不是很能理解。继续大牛指点指点吗。~~~~ 先继续研究官方 API 去咯。