一般的Android程序首次进入时都会有一个引导页面,本文简单的实现了一下这个功能。主要是用ViewPager配合GridView实现。ViewPager用来装载引导图片,GridView用来显示底部的指示图标。附件里是一些资源图片。
先看一下效果图:
具体代码如下,包括一个主Activity和两个适配器:
主Activity
public class GuideActivityActivity extends Activity implements OnPageChangeListener {
private List<View> views;
private ViewPager viewPager;
private GridView gridView;
private GuidePagerAdapter pagerAdapter;
private GuideGridAdapter gridAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);
initData();
initView();
}
private void initData() {
int images[] = {R.drawable.guide_first, R.drawable.guide_second, R.drawable.guide_third};
views = new ArrayList<View>();
for (int i = 0; i < images.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(images[i]);
imageView.setScaleType(ScaleType.FIT_XY);
views.add(imageView);
}
}
private void initView() {
viewPager = (ViewPager) findViewById(R.id.guide_viewpager);
gridView = (GridView) findViewById(R.id.guide_gridview);
pagerAdapter = new GuidePagerAdapter();
pagerAdapter.setViews(views);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(this);
gridAdapter = new GuideGridAdapter(this);
gridAdapter.setCountSize(views.size());
gridView.setColumnWidth(12);
gridView.setNumColumns(views.size());
gridView.setAdapter(gridAdapter);
gridAdapter.setSelectPoint(0);
gridAdapter.notifyDataSetChanged();
}
@Override
public void onPageScrollStateChanged(int arg0) {}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {}
@Override
public void onPageSelected(int position) {
gridAdapter.setSelectPoint(position);
gridAdapter.notifyDataSetChanged();
}
@Override
protected void onPause() {
super.onPause();
if (null != views) {
views.clear();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(null != viewPager){
viewPager.removeAllViews();
viewPager.destroyDrawingCache();
}
}
}
GridView和ViewPager的适配器
public class GuideGridAdapter extends BaseAdapter {
private int size;
private int index = 0;
private Context context;
public GuideGridAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return size;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
ImageView imageView = new ImageView(context);
convertView = imageView;
viewHolder = new ViewHolder();
viewHolder.dotView = imageView;
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (index == position) {
viewHolder.dotView.setImageResource(R.drawable.point_select);
} else {
viewHolder.dotView.setImageResource(R.drawable.point_noselect);
}
return convertView;
}
static class ViewHolder {
ImageView dotView = null;
}
/**
* 设置选中页 高亮显示
* @param indexPoint 当前选中页索引
*/
public void setSelectPoint(int indexPoint) {
this.index = indexPoint;
}
/**
* 设置页码总数
* @param countSize 页码总数
*/
public void setCountSize(int countSize) {
this.size = countSize;
}
}
public class GuidePagerAdapter extends PagerAdapter {
private List<View> views;
public void setViews(List<View> views) {
this.views = views;
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == (arg1);
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2){
((ViewPager) arg0).removeView(views.get(arg1));
}
@Override
public Object instantiateItem(View arg0, int arg1) {
((ViewPager) arg0).addView(views.get(arg1), 0);
return views.get(arg1);
}
}
布局文件guide.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<GridView
android:id="@+id/guide_gridview"
android:layout_width="70.0dip"
android:layout_height="25dip"
android:focusable="false"
android:focusableInTouchMode="false"
android:background="#00000000"
android:cacheColorHint="#00000000"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10.0dip"
android:layout_marginTop="10.0dip"
android:layout_centerHorizontal="true">
</GridView>
<android.support.v4.view.ViewPager
android:id="@+id/guide_viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/guide_gridview"/>
</RelativeLayout>
分享到:
相关推荐
Android应用程序实现欢迎引导页面的方法实现,仿新浪启动界面
android实现应用程序只有在第一次启动时显示引导界面 ,以后就不在显示了...判断系统是第一次运行的代码实现如
Android的APP应用中最常用的APP启动引导页,常见的4种引导项目方式:splash,viewpage,viewflipper,scrollview.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
ProductTour是非常漂亮的Android Studio版的应用引导页,或者叫应用欢迎页,应用介绍页。由于本人还是比较熟悉Eclipse,为了尽快完成项目,还没有时间倒腾AS,于是乎就自己修改ProductTour转成了Eclipse上运行的项目...
实现了Android程序第一次使用时启动了引导界面,而以后使用的时候就不启动了。。。
android 启动页 引导页 到主界面,含有检查应用更新。.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行...
Android应用源码高仿墨迹天气引导界面.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android APP引导页大全 Android Push it单机版事件管理APP Android RecycleView+任意头尾布局+拖拽换位+拖拽删除demo Android sql练习合集 Android 仿12306 Android 优秀计步器 Android 体重计算源码 Android 使用...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
3.1 Android应用程序的组成部分 43 3.2 程序清单简介 44 3.3 使用清单编辑器 47 3.4 Android应用程序生命周期 48 3.5 理解应用程序的优先级和进程状态 49 3.6 分离资源 50 3.6.1 创建资源 50 3.6.2 使用资源...
Android扩展 该存储库是有助于引导Android应用程序的模块的集合。 有10个模块: 名称描述1个应用程式一个示例应用程序,用于演示存储库中的模块。 2 向核心Android KTX库添加了一些实用程序。 包括对象上的扩展方法...
很多Android程序在启动时首先会显示一个封面(Splash窗口),过一会才进入主界面。Splash窗口通常是全屏的,一般会显示与程序相关的logo、公司标识等.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分...
1.9.3 Dalvik虚拟机 1.9.4 Android应用程序架构 1.9.5 Android库 1.9.6 高级Android库 1.10 小结 第2章 开始入手 2.1 Android开发 2.1.1 开始前的准备工作 2.1.2 创建第一个Android活动 2.1.3 Android应用程序的类型...
1.4 自带的Android应用程序 1.5 Android SDK功能 1.5.1 对包括摄像头、GPS和加速计在内的硬件的访问 1.5.2 自带的Google地图、地理编码和基于位置的服务 1.5.3 后台服务 1.5.4 SQLite数据存储和检索...
1.4 自带的Android应用程序 1.5 Android SDK功能 1.5.1 对包括摄像头、GPS和加速计在内的硬件的访问 1.5.2 自带的Google地图、地理编码和基于位置的服务 1.5.3 后台服务 1.5.4 SQLite数据存储和检索...
demo4:Android应用源码高仿墨迹天气引导界面 demo5:超炫丽viewpager用户引导 demo6:仿赶集生活android客户端的介绍动画界面 demo7:欢迎引导页面 demo8:闪屏及第一次进入的介绍界面 demo9:完美! 闪屏+引导页 ...
Android应用程序欢迎界面实现 经常使用到一些程序,因为开始的时候需要加载一些资料,或者是为了打下提示商标。往往都会在程序开始的时候加入欢迎界面。实现方法有很多种,今天就来说一下比较简单的方法吧。就是...
提供有关如何将 Tableau 可视化嵌入在 iOS 和 Android 上运行的 React Native 应用程序中的示例代码。 更多信息 和 。 这些会议概述了一些业务用例并提供了一些更多的技术背景。 会议视频和幻灯片可从这些 TC 页面...