Android开发之app入口引导页Viewpager
来源:互联网 发布:淘宝网官网卖家中心 编辑:程序博客网 时间:2024/05/04 18:37
从事Android的小伙伴们应该都知道,但凡现在的主流app进入都会有一个引导页面,引导用户进入app,所以我下面要说的就是这个功能:当然了,这种东西网上已经有一大堆,不过我觉得看的再多,自己动手后才是自己的!
- ViewPager 是在andeoid-support-v4.jar下,因此首先需要导入v4架包
- 自定义一个MyPagerAdapter继承PagerAdapter重写四个方法
instantiateItem(ViewGroup, int) ,destroyItem(ViewGroup, int, Object), getCount(),isViewFromObject(View, Object) - 在MainActivity中找到viewpager控件并实现OnPagerChangeListener接口
4.通过LayoutInflater 将多个view添加到viewpager中 - 绑定adapter
具体代码如下:
MyPagerAdapter
import java.util.List;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;public class MyPagerAdapter extends PagerAdapter { List<View> viewLists; public MyPagerAdapter(List<View> lists) { viewLists = lists; } //是获取当前窗体界面数 @Override public int getCount() { // TODO Auto-generated method stub return viewLists.size(); } //用于判断是否由对象生成界面 @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } //这个方法,是从ViewGroup中移出当前View @Override public void destroyItem(View view, int position, Object object) { // TODO Auto-generated method stub ((ViewPager) view).removeView(viewLists.get(position)); } //return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象*放在当前的ViewPager中 @Override public Object instantiateItem(View view, int position) { //添加页卡 ((ViewPager) view).addView(viewLists.get(position), 0); return viewLists.get(position); }}
main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.android_hl_1.WelcomeActivity" > <android.support.v4.view.ViewPager android:id="@+id/search_viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" > </android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/llGuideDots" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="25dp" android:orientation="horizontal" /></RelativeLayout>
MainActivity:
public class MainActivity implements ViewPager.OnPageChangeListener{private List<View> dotViewList;// 设置已经引导过了,下次启动不用再次引导 SharedPreferences preferences; Editor editor;private List<View> lists = new ArrayList<View>(); private MyAdapter adapter; private ViewPager viewPager; private LinearLayout mLlGuideDots;//引导点的布局 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mLlGuideDots = (LinearLayout) findViewById(R.id.llGuideDots); //记录第一次进入该界面 preferences = getSharedPreferences("first_pref", 0); editor = preferences.edit(); //初始化页面 bindViewPage(); //初始化点 initDots(); } /** *初始化点 */ private void initDots() { dotViewList = new ArrayList<View>(); for(int i=0;i<lists.size();i++){ View view=new View(this); LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(20,20); //设置点之间的距离 layoutParams.setMargins(5,0,5,0); view.setLayoutParams(layoutParams); view.setBackgroundResource(R.drawable.cai_start_dot_normal); mLlGuideDots.addView(view); dotViewList.add(view); } } private void bindViewPage() { viewPager = (ViewPager) findViewById(R.id.search_viewpager); View view1 = LayoutInflater.from(this).inflate(R.layout.welcom_1, null); View view2 = LayoutInflater.from(this).inflate(R.layout.welcom_2, null); View view3 = LayoutInflater.from(this).inflate(R.layout.welcom_3, null); ImageView start = (ImageView) view3.findViewById(R.id.start); start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 存入数据 editor.putBoolean("isFirstIn", false); // 提交修改 editor.commit(); Intent intent = new Intent(GuideActivity.this, WelcomeActivity.class); startActivity(intent); finish(); } }); lists.add(view1); lists.add(view2); lists.add(view3); adapter = new MyPagerAdapter(lists); viewPager.setAdapter(adapter); viewPager.setOnPageChangeListener(this); } private int currentIndex=0;//当前所在页面 //记录正在移动的pager @Override public void onPageScrollStateChanged(int position) { } //移动完成后 @Override public void onPageScrolled(int position, float arg1, int arg2) { dotViewList.get(currentIndex).setBackgroundResource( R.drawable.cai_start_dot_normal); dotViewList.get(position).setBackgroundResource( R.drawable.cai_start_dot_focused); //将移动后的下标赋值给当前下标 currentIndex = position; } @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub }}
cai_start_dot_focused.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="#ffffffff" /> <corners android:radius="90dip" /></shape>
cai_start_dot_normal.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="#33000000" /> <corners android:radius="90dip" /></shape>
写到这里差不多就完了,这个功能还是比较简单的,网上也有很多实例,总结一下:
主要是利用viewpager的滑动接口,实现页面间的跳转,当然了,viewpager里面不只是可以放view,也可以放activity以及fragment,但是作为一个引导页放入一个view差不多就能实现所需要的功能了,后面我还会总结viewpager中加入activity以及fragment的方法!
总结别人的东西,望自己能从中学习到更多,坚持坚持
1 0
- Android开发之app入口引导页Viewpager
- Android之ViewPager实现引导页(第一次打开App进入引导页,第二次直接进入APP主页面)
- 【iOS-Android开发对比】 之 APP入口
- 【iOS-Android开发对比】 之 APP入口
- Android学习之Android ViewPager引导页
- ViewPager+app新手引导页
- Android程序:使用ViewPager实现app引导页效果
- Android ViewPager demo APP首次启动引导页
- Android ViewPager引导页
- Android ViewPager引导页
- Android开发之使用ViewPager做引导页面
- Android开发之用ViewPager实现欢迎引导页面
- 【Android】app开发第一步:用ViewPager和SharedPreferences类设置app的引导界面
- Android开发之引导页
- 实践--ViewPager实现App引导页
- Android ViewPager实现引导页
- android引导页viewpager实现
- Android ViewPager实现引导页
- WebView控件中的onConsoleMessage方法不被调用
- Codeforces 615E Hexagons (Round #338 (Div. 2) E题) 二分答案+找规律
- 阿里中间件——消息中间件Notify和MetaQ
- (shell笔记三)shell与编程型语言的差异
- Redis学习记录之命令KEY(七)
- Android开发之app入口引导页Viewpager
- Request processing failed; nested exception is java.lang.NullPointerException] with root cause
- iOS开发之OC命名规范和编码规范(持续更新)
- CodeForces 471B MUH and Important Things
- 巅峰Q神下载 10.29 绿色版
- js-实现单向链表
- poj3629 Card Stacking——队列与循环队列
- 开源硬件
- C#之Virtual实例应用一