欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发之开发者头条(一)启动页实现

程序员文章站 2024-03-01 08:48:40
废话就不多说了,开始今天的正题,带你实现开发者头条app的启动页。 一.老规矩,先上效果图 从效果图中我们可以看出,整个滑动的界面就是一个viewpager...

废话就不多说了,开始今天的正题,带你实现开发者头条app的启动页。

一.老规矩,先上效果图

Android开发之开发者头条(一)启动页实现

从效果图中我们可以看出,整个滑动的界面就是一个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开发之开发者头条(二)实现左滑菜单,感兴趣的朋友继续关注网站!