当前位置: 移动技术网 > IT编程>移动开发>Android > Android开发之开发者头条(一)启动页实现

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

湖南妹子张丽种子,张蕙兰瑜伽冥想,天降麟儿系列

废话就不多说了,开始今天的正题,带你实现开发者头条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开发之开发者头条(二)实现左滑菜单,感兴趣的朋友继续关注移动技术网网站!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网