ViewPager欢迎界面

一、几张图片组成欢迎界面 下方有几个点对应每个图片 当图片被选中时对应的点会变亮,当对应的点被点击时也会切换到指定画面

以下是代码

  1 package com.example.viewpager_1;
  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.PagerAdapter;
  9 import android.support.v4.view.ViewPager;
 10 import android.support.v4.view.ViewPager.OnPageChangeListener;
 11 import android.view.View;
 12 import android.view.ViewGroup;
 13
 14 import android.widget.ImageView;
 15 import android.widget.ImageView.ScaleType;
 16 import android.widget.LinearLayout;
 17 import android.widget.LinearLayout.LayoutParams;
 18 import android.widget.Toast;
 19
 20 public class MainActivity extends Activity {
 21
 22     private ViewPager vPager;
 23     private List<ImageView> views;//ViewPager中显示的所有页面,PagerAdapter使用的数据源
 24     private PagerAdapter adapter;
 25
 26     private LinearLayout navLayout;//导航布局空间
 27
 28     private LinearLayout.LayoutParams layoutParams;//线性布局中子控件使用的布局参数,作用设置子控件大小,外边距
 29
 30
 31     @Override
 32     protected void onCreate(Bundle savedInstanceState) {
 33         super.onCreate(savedInstanceState);
 34         setContentView(R.layout.activity_main);
 35         navLayout = (LinearLayout) findViewById(R.id.navLayouttId);
 36
 37         vPager = (ViewPager) findViewById(R.id.viewPager);
 38
 39         inintViews();//初始化显示的页面
 40         //设置viewpager的页面滑动事件
 41         vPager.setOnPageChangeListener(new OnPageChangeListener() {
 42             @Override
 43             public void onPageSelected(int position) {
 44                 // 指定的位置的页面被选择
 45                 selectNav(position);
 46             }
 47
 48             private void selectNav(int position) {
 49                 // 选择指定位置的导航图片为选择图片,选择的图片要重置一下
 50                 ImageView navImg  = null;
 51                 //遍历 导航布局中所有的子控件,判断子控件的位置是否为选择位置,若是,则改变图片的内容
 52                 for(int i=0;i<navLayout.getChildCount();i++){
 53                     navImg = (ImageView) navLayout.getChildAt(i );//获取布局中指定位置的子控件
 54                     if(i==position)
 55                         navImg.setImageResource(R.drawable.page_now);
 56                     else
 57                         navImg.setImageResource(R.drawable.page);
 58                 }
 59             }
 60             /*
 61              * 第一个参数: 滚动页面开始的位置
 62              * 第二个参数:  两个页面之间滚动的偏移量,范围是0-1
 63              * 第三个参数:两个页面之间滚动的像素偏移量
 64              */
 65             @Override
 66             public void onPageScrolled(int position, float offset, int offsetPixels) {
 67                 // TODO 从当前页面位置开始滚动事件
 68             }
 69
 70             @Override
 71             public void onPageScrollStateChanged(int state) {
 72                 // 页面滚动状态发生变化时事件: 开始滚动,停止滚动,正在设置页面
 73 //                ViewPager.SCROLL_STATE_DRAGGING 开始滚动
 74 //                ViewPager.SCROLL_STATE_IDLE 停止滚动
 75 //                ViewPager.SCROLL_STATE_SETTLING 正在设置页面,即将要停止,并且设置当前的页面
 76
 77                 switch (state) {
 78                 case ViewPager.SCROLL_STATE_DRAGGING:
 79                     break;
 80                 case ViewPager.SCROLL_STATE_IDLE:
 81                     break;
 82                 case ViewPager.SCROLL_STATE_SETTLING:
 83                     break;
 84                 default:
 85                     break;
 86                 }
 87             }
 88         });
 89     }
 90     private void inintViews() {
 91         // TODO 加载viewpager中显示的额页面
 92         views = new ArrayList<ImageView>();
 93         ImageView imgView = null;
 94         ImageView navImg = null;
 95         layoutParams =    new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
 96         layoutParams.leftMargin=20;
 97         layoutParams.rightMargin=20;//px
 98         for(int i=1;i<=3;i++){
 99             //实例化viewpager中要显示图片的空间
100             imgView = new ImageView(getApplicationContext());
101             imgView.setScaleType(ScaleType.CENTER_CROP);
102
103             //根据资源名和类型获取 这一资源的标示 -->R.drawable.slide1
104             int resId = getResources().getIdentifier("slide"+i, "drawable", getPackageName());
105             imgView.setImageResource(resId);//设置图片控件显示的图片资源
106             if(i==3){
107                 imgView.setOnClickListener(new View.OnClickListener() {
108                     @Override
109                     public void onClick(View v) {
110                         Toast.makeText(getApplicationContext(), "正在跳转。。。。", 0).show();
111                     }
112                 });
113             }
114             views.add(imgView);//将实例化的空间添加到数据源中。
115
116             navImg = new ImageView(getApplicationContext());
117             navImg.setScaleType(ScaleType.CENTER_CROP);
118             if(i==1)
119                 navImg.setImageResource(R.drawable.page_now);
120             else
121                 navImg.setImageResource(R.drawable.page);
122
123             //设置导航图片的标签: 当前导航图片的位置
124             navImg.setTag(i-1);
125             navImg.setOnClickListener(new View.OnClickListener() {
126                 @Override
127                 public void onClick(View v) {
128                     // 点击导航图片的事件方法: 读取图片控件中的标签,转化为与ViewPager页面对应的位置,最后选择页面
129                     int position = (Integer) v.getTag();
130                     vPager.setCurrentItem(position);//切换viewpager显示的位置
131                 }
132             });
133             navLayout.addView(navImg,layoutParams);
134         }
135         //实例化PagerAdapter适配器
136         adapter = new WelcomePagerAdapter();
137         vPager.setAdapter(adapter);
138         //设置移除UI的间隔大小
139 //        vPager.setOffscreenPageLimit(3);//默认值不能小于1,建议不要 改变默认值。
140     }
141     //声明PagerAdapter的子类,用于管理ViewPager中显示的View控件
142     class WelcomePagerAdapter extends PagerAdapter{
143         @Override
144         public int getCount() {
145             // TODO 显示返回页面的总大小
146             return views.size();
147         }
148         @Override
149         public Object instantiateItem(ViewGroup container, int position) {
150             // TODO 获取指定位置的view,并增加到ViewPager中,同时作为当前页面的数据返回
151             container.addView(views.get(position));
152             return views.get(position);//作为当前页面的数据返回
153         }
154         @Override
155         public void destroyItem(ViewGroup container, int position, Object object) {
156             // TODO 当前 位置与viewpager当中正显示页面的位置的间隔超出了一页时,需要将当前
157             //位置的页面移除掉.同时 实例化三个页面
158             container.removeView(views.get(position));
159         }
160         //固定写法;
161         @Override
162         public boolean isViewFromObject(View arg0, Object arg1) {
163             // TODO 判断当前显示的页面的UI对象和数据对象是否 一致
164
165             return arg0==arg1;
166         }
167     }
168 }

MainActivity.java

 1 <FrameLayout 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     tools:context=".MainActivity" >
 6
 7     <!-- 使用v4包下的可左右滑动的控件,其显示的页面需要通过PagerAdapter适配器增加或移除 -->
 8
 9     <android.support.v4.view.ViewPager
10         android:id="@+id/viewPager"
11         android:layout_width="match_parent"
12         android:layout_height="match_parent" />
13
14     <!-- 导航小图片所在的布局 -->
15     <LinearLayout
16         android:id="@+id/navLayoutId"
17         android:layout_width="match_parent"
18         android:layout_height="wrap_content"
19         android:layout_gravity="bottom"
20         android:layout_marginBottom="10dp"
21         android:background="#4000"
22         android:gravity="center"
23         android:orientation="horizontal"
24         android:padding="20dp" />
25
26 </FrameLayout>

activity_main.xml

效果图

时间: 2024-10-07 10:11:20

ViewPager欢迎界面的相关文章

【笔记】WPF实现类似安卓ViewPager引导界面效果及问题汇总

最近在开发项目的首次使用引导界面时,遇到了问题,引导界面类似于安卓手机ViewPager那样的效果,希望通过左右滑动手指来实现切换不同页面,其间伴随动画. 实现思路: 1.界面布局:新建一个UserControl,最外层为Grid,两行一列,内嵌一个Canvas和StackPanel.Canvas中放一个StackPanel用于存放大图列表,外层的StackPanel用于存放RadioButton组,Xaml代码如下: 1 <Grid x:Name="grid"> 2 &l

Viewpager以及ViewPagerIndicator的相关使用

ViewPagerIndicator开源框架可以用来在ViewPager上方做标题,可以在ViewPager下方做跟随移动的小圆点,这个类库必须和自己的项目在电脑的同一磁盘盘符下,比如都在D盘或者E盘,下载这个开源框架后一般有类库和例子程序,然后自己的项目引入这个类库,这时会出现的问题是,自己的项目的V4包和ViewPagerIndicator的V4包产生冲突,解决办法是:在自己项目的libs目录下删除V4包,进入到文件目录下使用360强力删除,即可解决V4包冲突问题 第一个例子,在ViewPa

ViewPager + Fragment 制作类似底部导航栏

1. 四个类似的Frament布局 tab_main_fragment.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical&q

ViewPager和View的事件响应规则

案例背景: 当我们实现viewpager的自动切换界面操作的时候,如果需要增加点击图片viewpager停止自动切换,松开手指viewpager自动切换又继续执行的逻辑,正常思维下实现代码如下所示: 利用handler发送消息实现viewpager 自动滑动         if (handler == null) {             handler = new Handler(){                 @Override                 public voi

ViewPager里实现监听和MyFragmentStatePagerAdapter适配器和MyFragmentPagerAdapter适配器

ViewPager里实现监听ViewPager.OnPageChangeListener MainActivity 1 package viewpagedemo.example.administrator.viewpagedemo; 2 3 import android.graphics.Color; 4 import android.os.Bundle; 5 import android.support.v4.app.Fragment; 6 import android.support.v4.

ViewPager动画详解

GitHub:lightSky 微博:    light_sky, 即时分享最新技术,欢迎关注 前言 前两天看到鲍永章分享的Great animations with PageTransformer以及农民伯伯分享的Create ViewPager transitions 文章,都是通过ViewPager来实现酷炫的动画,而现在的App中ViewPager的动画使用也非常的广泛.正好最近一直研究动画,那么就趁热打铁,分析一下相关的开源库吧.本篇文章介绍的ViewPager动画,可以分为两类,第一

Android中 ViewPager的使用

我们在使用电商或视频的手机客户端时,通常会看到广告条的效果.在网上搜索时才知道使用的是ViewPager,于是自己也做了一个Demo. 以下是效果图: 图中包括背景图片.文字描述以及白点. 其中ViewPager是android中support.v4包下的view.ViewPager类. 下面贴出代码:(注意:项目中需要五张图片) 布局文件main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/

ViewPager使用中的一些小技巧

1.使用setOffscreenPageLimit()方法可以限制它一次加载几页,它的默认值1,google建议也是维护一下小的加载页数3-4: 但是只要手机性能稍微弱一点和系统内存更不上,都会导致切换的时候出现部分数据显示不出,白屏:尤其是在红米系统,如果总页数大于4,个人建议设置2 2.使用viewpager做懒加载,也就是在viewpager缓存界面的时候:当前界面没有显示就先加载布局,显示的时候加载网络数据; 使用Fragment的setUserVisibleHint()方法做实现,或者

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签