Android开发之开发者头条(一)启动页实现
程序员文章站
2024-03-01 08:48:40
废话就不多说了,开始今天的正题,带你实现开发者头条app的启动页。
一.老规矩,先上效果图
从效果图中我们可以看出,整个滑动的界面就是一个viewpager...
废话就不多说了,开始今天的正题,带你实现开发者头条app的启动页。
一.老规矩,先上效果图
从效果图中我们可以看出,整个滑动的界面就是一个viewpager实现,然后监听viewpager的滑动事件,改变底部四个小图标的切换,以及跳转到首页的按钮的隐藏显示。
二.代码实现
1).整个布局文件。上面是viewpager,下面是四个小图标存放的容器。
<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" android:background="#fcf2e4"> <android.support.v4.view.viewpager android:id="@+id/viewpager_launcher" android:layout_width="match_parent" android:layout_height="match_parent" /> <relativelayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <linearlayout android:id="@+id/viewgroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_marginbottom="30dp" android:gravity="center_horizontal" android:orientation="horizontal"/> </relativelayout> </relativelayout>
2).launcheractivity 首先判断是否第一次启动,如果不是第一次直接进入首页,是第一次启动就初始化viewpager,设置适配器,设置viewpager滑动监听,然后添加底部的。。。view。 在viewpager监听函数里面改变底部图标的选中状态,如果是最后一页显示“开启我的头条”按钮。
/** * 第一次启动页面 * * @author ansen * @create time 2016-04-15 */ @suppresslint("resourceascolor") public class launcheractivity extends fragmentactivity implements ilauncherview { private viewpager viewpagerlauncher; private launcherpageradapter adapter; private imageview[] tips; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_luancher); if(!isfirst()){ gotomain(); } viewpagerlauncher = (viewpager) findviewbyid(r.id.viewpager_launcher); adapter = new launcherpageradapter(this, this); viewpagerlauncher.setoffscreenpagelimit(2); viewpagerlauncher.setcurrentitem(0); viewpagerlauncher.setonpagechangelistener(changelistener); viewpagerlauncher.setadapter(adapter); viewpagerlauncher.setonpagechangelistener(changelistener); viewgroup group = (viewgroup) findviewbyid(r.id.viewgroup);// 初始化底部显示控件 tips = new imageview[4]; for (int i = 0; i < tips.length; i++) { imageview imageview = new imageview(this); if (i == 0) { imageview.setbackgroundresource(r.drawable.page_indicator_focused); } else { imageview.setbackgroundresource(r.drawable.page_indicator_unfocused); } tips[i] = imageview; linearlayout.layoutparams layoutparams = new linearlayout.layoutparams(new viewgroup.layoutparams(layoutparams.wrap_content,layoutparams.wrap_content)); layoutparams.leftmargin = 10;// 设置点点点view的左边距 layoutparams.rightmargin = 10;// 设置点点点view的右边距 group.addview(imageview, layoutparams); } } private onpagechangelistener changelistener = new onpagechangelistener() { @override public void onpagescrollstatechanged(int arg0) {} @override public void onpagescrolled(int arg0, float arg1, int arg2) {} @override public void onpageselected(int index) { setimagebackground(index);// 改变点点点的切换效果 textview tvstartheadlines = (textview) adapter.getviews().get(index).findviewbyid(r.id.tv_start_headlines); if (index == tips.length - 1) {// 最后一个 tvstartheadlines.setvisibility(view.visible); } else { tvstartheadlines.setvisibility(view.invisible); } } }; /** * 改变点点点的切换效果 * @param selectitems */ private void setimagebackground(int selectitems) { for (int i = 0; i < tips.length; i++) { if (i == selectitems) { tips[i].setbackgroundresource(r.drawable.page_indicator_focused); } else { tips[i].setbackgroundresource(r.drawable.page_indicator_unfocused); } } } @override public void gotomain() { intent intent = new intent(this, mainactivity.class); startactivity(intent); finish(); } private boolean isfirst() { sharedpreferences setting = getsharedpreferences("headlines", 0); boolean user_first = setting.getboolean("first", true); if (user_first) {// 第一次 setting.edit().putboolean("first", false).commit(); return true; } else { return false; } } }
3).launcherpageradapter 继承pageradapter,在构造函数中初始化要显示的所有页面,其他的跟普通的适配器没啥区别,就多了两个重写的方法,destroyitem跟instantiateitem。destroyitem是删除一个页面,instantiateitem是加载一个页面。。
/** * viewpager适配器 * @author ansen * @create time 2016-04-15 */ public class launcherpageradapter extends pageradapter implements onclicklistener{ private ilauncherview launcherview; private list<view> views; //每页显示的图片 private int[] images=new int[]{r.drawable.tutorial_1,r.drawable.tutorial_2,r.drawable.tutorial_3,r.drawable.tutorial_4}; public launcherpageradapter(context context,ilauncherview launcherview){ views=new arraylist<view>(); this.launcherview=launcherview; //初始化每页显示的view for(int i=0;i<images.length;i++){ view item=layoutinflater.from(context).inflate(r.layout.activity_luancher_pager_item, null); imageview imageview=(imageview) item.findviewbyid(r.id.imageview); imageview.setimageresource(images[i]); item.findviewbyid(r.id.tv_start_headlines).setonclicklistener(this); views.add(item); } } public list<view> getviews() { return views; } @override public int getcount() { return views == null ? 0 : views.size(); } @override public boolean isviewfromobject(view arg0, object arg1) { return arg0==arg1; } @override public void destroyitem(viewgroup container, int position, object object){ ((viewpager) container).removeview(views.get(position)); } @override public object instantiateitem(viewgroup container, int position) { ((viewpager) container).addview(views.get(position), 0); return views.get(position); } @override public void onclick(view v) { launcherview.gotomain(); } }
4).还有每一页显示的item布局,以及“开启我的头条”按钮的背景shape我就不一一贴出来了。
关于 android开发之开发者头条(一)启动页实 就给大家介绍这么多。下篇文章给大家介绍android开发之开发者头条(二)实现左滑菜单,感兴趣的朋友继续关注网站!
推荐阅读
-
Android开发之开发者头条(一)启动页实现
-
Android开发之开发者头条APP(三)实现首页
-
Android开发之开发者头条(二)实现左滑菜单
-
Android开发之开发者头条(一)启动页实现
-
Android UI设计与开发之实现应用程序只启动一次引导界面
-
Android UI设计与开发之实现应用程序只启动一次引导界面
-
Android实现过渡动画、引导页 Android判断是否第一次启动App
-
Android四大组件之Activity启动流程源码实现详解(一)
-
Android实现过渡动画、引导页 Android判断是否第一次启动App
-
Android四大组件之Activity启动流程源码实现详解(一)