博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android UI设计与开发】2.引导界面(二)使用ViewPager实现欢迎引导页面
阅读量:6454 次
发布时间:2019-06-23

本文共 5561 字,大约阅读时间需要 18 分钟。

1.实现的效果

 

2.编码前的准备工作

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

 

3.具体的编码实现

(1)布局界面比较简单,加入ViewPager组件,以及底部的引导小点

activity_main.xml

(2)其中小点的图片用一个selector来控制颜色

point.xml

(3)重写ViewPager适配器

package com.yanis.yc_ui_viewpager_guideview;import java.util.ArrayList;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;/** *  * @author YeChao * @功能描述:ViewPager适配器,用来绑定数据和view  */public class ViewPagerAdapter extends PagerAdapter{    //界面列表      private ArrayList
views; public ViewPagerAdapter(ArrayList
views) { this.views = views; } /** * 获得当前界面数 */ @Override public int getCount() { if (views != null) { return views.size(); } else return 0; } /** * 判断是否由对象生成界面 */ @Override public boolean isViewFromObject(View arg0, Object arg1) { return (arg0 == arg1); } /** * 销毁position位置的界面 */ @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(views.get(position)); } /** * 初始化position位置的界面 */ @Override public Object instantiateItem(View container, int position) { ((ViewPager) container).addView(views.get(position), 0); return views.get(position); } }
ViewPagerAdapter.class

(4)编辑主程序入口类

package com.yanis.yc_ui_viewpager_guideview;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.ImageView.ScaleType;import android.widget.LinearLayout;/** *  * @author YeChao * @功能描述:主程序入口类 */public class MainActivity extends Activity implements OnClickListener,        OnPageChangeListener {    // 定义ViewPager对象    private ViewPager viewPager;    // 定义ViewPager适配器    private ViewPagerAdapter vpAdapter;    // 定义一个ArrayList来存放View    private ArrayList
views; // 引导图片资源 private static final int[] pics = { R.drawable.guide1, R.drawable.guide2, R.drawable.guide3, R.drawable.guide4 }; // 底部小点的图片 private ImageView[] points; // 记录当前选中位置 private int currentIndex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } /** * 初始化组件 */ private void initView() { // 实例化ArrayList对象 views = new ArrayList
(); // 实例化ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); // 实例化ViewPager适配器 vpAdapter = new ViewPagerAdapter(views); } /** * 初始化数据 */ private void initData() { // 定义一个布局并设置参数 LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); // 初始化引导图片列表 for (int i = 0; i < pics.length; i++) { ImageView iv = new ImageView(this); iv.setLayoutParams(mParams); //防止图片不能填满屏幕 iv.setScaleType(ScaleType.FIT_XY); //加载图片资源 iv.setImageResource(pics[i]); views.add(iv); } // 设置数据 viewPager.setAdapter(vpAdapter); // 设置监听 viewPager.setOnPageChangeListener(this); // 初始化底部小点 initPoint(); } /** * 初始化底部小点 */ private void initPoint() { LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll); points = new ImageView[pics.length]; // 循环取得小点图片 for (int i = 0; i < pics.length; i++) { // 得到一个LinearLayout下面的每一个子元素 points[i] = (ImageView) linearLayout.getChildAt(i); // 默认都设为灰色 points[i].setEnabled(true); // 给每个小点设置监听 points[i].setOnClickListener(this); // 设置位置tag,方便取出与当前位置对应 points[i].setTag(i); } // 设置当面默认的位置 currentIndex = 0; // 设置为白色,即选中状态 points[currentIndex].setEnabled(false); } /** * 滑动状态改变时调用 */ @Override public void onPageScrollStateChanged(int arg0) { } /** * 当前页面滑动时调用 */ @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } /** * 新的页面被选中时调用 */ @Override public void onPageSelected(int arg0) { // 设置底部小点选中状态 setCurDot(arg0); } @Override public void onClick(View v) { int position = (Integer) v.getTag(); setCurView(position); setCurDot(position); } /** * 设置当前页面的位置 */ private void setCurView(int position) { if (position < 0 || position >= pics.length) { return; } viewPager.setCurrentItem(position); } /** * 设置当前的小点的位置 */ private void setCurDot(int positon) { if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) { return; } points[positon].setEnabled(false); points[currentIndex].setEnabled(true); currentIndex = positon; }}
MainActivity.class

 

源代码地址:

来源:

转载地址:http://vlyzo.baihongyu.com/

你可能感兴趣的文章
java实现pdf旋转_基于Java实现PDF文本旋转倾斜
查看>>
java二维数组内存模型_C++二级指针第二种内存模型(二维数组)
查看>>
java static import 与 import_Java中的import和static import语句之间有什么区别?
查看>>
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>
java 代替Python_Java总是“沉沉浮浮”,替代者会是Python?
查看>>
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>
java 顶点着色_金属顶点着色器绘制纹理点
查看>>
php扩展有哪些G11,php 几个扩展(extension)的安装笔记
查看>>
ajax长连接 php,ajax怎么实现服务器与浏览器长连接
查看>>
oracle报1405,【案例】Oracle报错ORA-15054 asm diskgroup无法mount的解决办法
查看>>
php 5.4.24 win32,PHP 5.4.14 和 PHP 5.3.24 发布
查看>>
oracle top pid,Linux Top 命令解析 比较详细
查看>>
grub如何进入linux系统,Linux操作系统启动管理器-GRUB
查看>>
linux pbs 用户时间,【Linux】单计算机安装PBS系统(Torque)与运维
查看>>
linux系统可用内存减少,在Linux中检查可用内存的5种方法
查看>>
linux 脚本map,Linux Shell Map的用法详解
查看>>
如何在linux系统下配置共享文件夹,如何在windows和Linux系统之间共享文件夹.doc
查看>>
thinkpad装linux无线网卡驱动,ThinkPad E530 Fedora 20 下无线网卡驱动的安装
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>