一、几张图片组成欢迎界面 下方有几个点对应每个图片 当图片被选中时对应的点会变亮,当对应的点被点击时也会切换到指定画面
以下是代码
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