高仿网易新闻顶部滑动条效果实现代码

这个是网易新闻的主界面,我们知道底部可以用tabhost实现,这个很容易,我们在其他软件中也会经常用到。

至于顶部的滑动条,个人感觉还是比较漂亮的所以今天也模仿了下,网易顶部滑动条的效果,由于初次模仿这种效果,可能有些地方还不够完美,不过基本已经实现,希望大家能够喜欢。

废话不多说,下面上代码:

首先是布局layout下的main.xml

复制代码 代码如下:

<?xmlversion="1.0"encoding="utf-8"?>

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/root"

android:background="#ffffff"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<LinearLayout

android:id="@+id/layoutBar"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@drawable/big_button_up"

android:orientation="horizontal">

<RelativeLayout

android:id="@+id/layout1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1.0">

<TextView

android:id="@+id/tab1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="新闻"/>

</RelativeLayout>

<RelativeLayout

android:id="@+id/layout2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1.0">

<TextView

android:id="@+id/tab2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="体育"/>

</RelativeLayout>

<RelativeLayout

android:id="@+id/layout3"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1.0">

<TextView

android:id="@+id/tab3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="娱乐"/>

</RelativeLayout>

<RelativeLayout

android:id="@+id/layout4"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_weight="1.0">

<TextView

android:id="@+id/tab4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="更多"/>

</RelativeLayout>

</LinearLayout>

<LinearLayout

android:id="@+id/page"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_alignParentLeft="true"

android:layout_below="@+id/layoutBar"

android:background="#ffffff"

android:orientation="vertical"

>

</LinearLayout>

</RelativeLayout>

下面是核心类,

复制代码 代码如下:

packagecn.com.karl.slider;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.Gravity;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.ViewGroup.LayoutParams;

importandroid.view.animation.TranslateAnimation;

importandroid.widget.LinearLayout;

importandroid.widget.RelativeLayout;

importandroid.widget.TextView;

publicclassSliderBarActivityextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

privateRelativeLayoutlayout;

privateRelativeLayoutlayout1;

privateRelativeLayoutlayout2;

privateRelativeLayoutlayout3;

privateRelativeLayoutlayout4;

privateTextViewtab1;

privateTextViewtab2;

privateTextViewtab3;

privateTextViewtab4;

privateTextViewfirst;

privateintcurrent=1;

privateLinearLayoutpage;

privatebooleanisAdd=false;

privateintselect_width;

privateintselect_height;

privateintfirstLeft;

privateintstartLeft;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

init();

}

privatevoidinit(){

layout=(RelativeLayout)findViewById(R.id.root);

layout1=(RelativeLayout)findViewById(R.id.layout1);

layout2=(RelativeLayout)findViewById(R.id.layout2);

layout3=(RelativeLayout)findViewById(R.id.layout3);

layout4=(RelativeLayout)findViewById(R.id.layout4);

page=(LinearLayout)this.findViewById(R.id.page);

tab1=(TextView)findViewById(R.id.tab1);

tab1.setOnClickListener(onClickListener);

tab2=(TextView)findViewById(R.id.tab2);

tab2.setOnClickListener(onClickListener);

tab3=(TextView)findViewById(R.id.tab3);

tab3.setOnClickListener(onClickListener);

tab4=(TextView)findViewById(R.id.tab4);

tab4.setOnClickListener(onClickListener);

RelativeLayout.LayoutParamsrl=newRelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

rl.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE);

first=newTextView(this);

first.setTag("first");

first.setGravity(Gravity.CENTER);

first.setBackgroundResource(R.drawable.slidebar);

first.setText(tab1.getText());

Viewview1=LayoutInflater.from(getApplicationContext()).inflate(R.layout.page1,null);

page.addView(view1);

switch(current){

case1:

layout1.addView(first,rl);

current=R.id.tab1;

break;

case2:

layout2.addView(first,rl);

current=R.id.tab2;

break;

case3:

layout3.addView(first,rl);

current=R.id.tab3;

break;

case4:

layout4.addView(first,rl);

current=R.id.tab4;

break;

default:

break;

}

}

privatevoidreplace(){

switch(current){

caseR.id.tab1:

changeTop(layout1);

break;

caseR.id.tab2:

changeTop(layout2);

break;

caseR.id.tab3:

changeTop(layout3);

break;

caseR.id.tab4:

changeTop(layout4);

break;

default:

break;

}

}

privatevoidchangeTop(RelativeLayoutrelativeLayout){

TextViewold=(TextView)relativeLayout.findViewWithTag("first");;

select_width=old.getWidth();

select_height=old.getHeight();

RelativeLayout.LayoutParamsrl=newRelativeLayout.LayoutParams(select_width,select_height);

rl.leftMargin=old.getLeft()+((RelativeLayout)old.getParent()).getLeft();

rl.topMargin=old.getTop()+((RelativeLayout)old.getParent()).getTop();

firstLeft=old.getLeft()+((RelativeLayout)old.getParent()).getLeft();

TextViewtv=newTextView(this);

tv.setTag("move");

tv.setBackgroundResource(R.drawable.slidebar);

layout.addView(tv,rl);

relativeLayout.removeView(old);

}

privateOnClickListeneronClickListener=newOnClickListener(){

publicvoidonClick(Viewv){

if(!isAdd){

replace();

isAdd=true;

}

TextViewtop_select=(TextView)layout.findViewWithTag("move");

top_select.setGravity(Gravity.CENTER);

top_select.setText(tab1.getText());

inttabLeft;

intendLeft=0;

booleanrun=false;

switch(v.getId()){

caseR.id.tab1:

if(current!=R.id.tab1){

page.removeAllViews();

tabLeft=((RelativeLayout)tab1.getParent()).getLeft()+tab1.getLeft()+tab1.getWidth()/2;

endLeft=tabLeft-select_width/2;

current=R.id.tab1;

top_select.setText(tab1.getText());

run=true;

Viewview1=LayoutInflater.from(getApplicationContext()).inflate(R.layout.page1,null);

page.addView(view1);

}

break;

caseR.id.tab2:

if(current!=R.id.tab2){

page.removeAllViews();

tabLeft=((RelativeLayout)tab2.getParent()).getLeft()+tab2.getLeft()+tab2.getWidth()/2;

endLeft=tabLeft-select_width/2;

current=R.id.tab2;

top_select.setText(tab2.getText());

run=true;

Viewview2=LayoutInflater.from(getApplicationContext()).inflate(R.layout.page2,null);

page.addView(view2);

}

break;

caseR.id.tab3:

if(current!=R.id.tab3){

page.removeAllViews();

tabLeft=((RelativeLayout)tab3.getParent()).getLeft()+tab3.getLeft()+tab3.getWidth()/2;

endLeft=tabLeft-select_width/2;

current=R.id.tab3;

top_select.setText(tab3.getText());

run=true;

Viewview3=LayoutInflater.from(getApplicationContext()).inflate(R.layout.page3,null);

page.addView(view3);

}

break;

caseR.id.tab4:

if(current!=R.id.tab4){

page.removeAllViews();

tabLeft=((RelativeLayout)tab4.getParent()).getLeft()+tab3.getLeft()+tab4.getWidth()/2;

endLeft=tabLeft-select_width/2;

current=R.id.tab4;

top_select.setText(tab4.getText());

run=true;

Viewview4=LayoutInflater.from(getApplicationContext()).inflate(R.layout.page4,null);

page.addView(view4);

}

break;

default:

break;

}

if(run){

TranslateAnimationanimation=newTranslateAnimation(startLeft,endLeft-firstLeft,0,0);

startLeft=endLeft-firstLeft;

animation.setDuration(100);

animation.setFillAfter(true);

top_select.bringToFront();

top_select.startAnimation(animation);

}

}

};

}

由于时间比较紧,我没有做注释,有时间再做注释啊。

看一下效果是不是一样啊!

效果还请大家自行体验并改进,由于时间仓促,代码并未做注释,希望大家能够原谅

时间: 2024-11-06 13:51:53

高仿网易新闻顶部滑动条效果实现代码的相关文章

高仿网易新闻顶部滑动条效果实现代码_Android

这个是网易新闻的主界面,我们知道底部可以用tabhost实现,这个很容易,我们在其他软件中也会经常用到. 至于顶部的滑动条,个人感觉还是比较漂亮的所以今天也模仿了下,网易顶部滑动条的效果,由于初次模仿这种效果,可能有些地方还不够完美,不过基本已经实现,希望大家能够喜欢. 废话不多说,下面上代码: 首先是布局layout下的main.xml 复制代码 代码如下: <?xmlversion="1.0"encoding="utf-8"?> <Relati

Android仿网易客户端顶部导航栏效果_Android

最近刚写了一个网易客户端首页导航条的动画效果,现在分享出来给大家学习学习.我说一下这个效果的核心原理.下面是效果图:          首先是布局,这个布局是我从网易客户端反编译后弄来的.大家看后应该明白,布局文件如下: <FrameLayout android:id="@id/column_navi" android:layout_width="fill_parent" android:layout_height="wrap_content&quo

Android高仿微信对话列表滑动删除效果

前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有.思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可.由于ListView是上下滑动而item是左右滑动,因此会有滑动冲突,也许你需要了解下android中点击事件的派发流程,请参考Android源码分析-点击事件派发机制.我的解决思路是这样的:重写ListView的onInterceptTouchEvent方法,在move的时候做判断,如果是左右滑动就返回false,否则返

Android实现仿网易新闻的顶部导航指示器_Android

我们知道,页面导航器(Navigator)在几乎所有的项目中都会用到,平时大多数时候为了节省时间,都会直接在github上面拿别人的开源项目来用,最近自己在复习自定义View,就尝试封装了一下,源码参考项目PagerSlidingTabStrip 大家先来看一下效果图 基于文字的页面导航器 基于图片的页面导航器 使用方法 主要步骤分为三步 1)在xml文件里面 <com.xujun.viewpagertabindicator.TabPagerIndicator android:id="@+

Android实现仿网易新闻的顶部导航指示器

我们知道,页面导航器(Navigator)在几乎所有的项目中都会用到,平时大多数时候为了节省时间,都会直接在github上面拿别人的开源项目来用,最近自己在复习自定义View,就尝试封装了一下,源码参考项目PagerSlidingTabStrip 大家先来看一下效果图 基于文字的页面导航器 基于图片的页面导航器 使用方法 主要步骤分为三步 1)在xml文件里面 <com.xujun.viewpagertabindicator.TabPagerIndicator android:id="@+

Android项目实战之仿网易新闻的页面(RecyclerView )

本文实例实现一个仿网易新闻的页面,上面是轮播的图片,下面是 RecyclerView 显示新闻列表,具体内容如下 错误方法 <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...> <ViewPager ... /> <android.support.v7.widget.RecyclerView .../> </LinearLayout> 这样布局

仿网易新闻客户端

https://github.com/xiangzhihong/newsApp newsApp是一款仿网易新闻的客户端产品,非官方版本,属于个人业余时间做的一个小项目: 界面有一些仿网易新闻客户端 主要用到了网络请求,下拉刷新,指示器,以及一些自定义的动画效果,由于现在流行将代码开源,如实我也开源了几个项目,希望大家喜欢. 主要分为四大板块: [文章] [视频] [论坛] [游戏]   整体架构采用了MVC的设计模式 项目中由于存在大量网络图片,所以采用了二级缓存 主要使用的第三方开源框架有:

Android实现仿网易新闻主界面设计_Android

下面先来一张效果图    根据图片分析,要实现的有侧边栏DrawerLayout,ActionBar的颜色和菜单以及ActionBarDrawerToggle的动画效果. 在这之前,Theme要改成带有ActionBar的主题 android:theme="@android:style/Theme.Holo.Light" 一:侧边栏-DrawerLayout 根据官方文档,DrawerLayout布局的第一个视图是activity的主视图,第二个是侧边栏视图 因此主布局可以如下这样 F

Slider 滑动条效果

这个滑动条(拖动条)效果,一开始是参考了BlueDestiny的slider和Apple产品展示的样式,做了程序的原型. 在做了拖放效果之后,我想应该可以做一个更好的了,所以重做一遍,完善和扩展了一些功能. 碍于时间没有做得很强大,都是一些基本功能,希望各位多提意见! 效果预览 预览效果1: 这个是仿Apple滑动条产品展示效果. 除了原来的效果(包括点击缓动滑移.拖动滑移),我还加入了本程序特有的滚轮和键盘控制,滑动条两端鼠标放上去会自动滑动,滑动到两边还会自动换一个表示停止的图案 预览效果2