代码下载地址:http://www.devdiv.com/thread-101454-1-1.html
使用了ActivityGroup。
public class MainActivity extends ActivityGroup {
private RelativeLayout layout;
private RelativeLayout layout1;
private RelativeLayout layout2;
private RelativeLayout layout3;
private RelativeLayout bodylayout;
private ImageView tab1;
private ImageView tab2;
private ImageView tab3;
private ImageView first;
private int current = 1; //默认选中第一个,可以动态的改变此参数值
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initUI();
}
private void initUI(){
layout = (RelativeLayout) findViewById(R.id.root);
layout1 = (RelativeLayout) findViewById(R.id.layout1);
layout2 = (RelativeLayout) findViewById(R.id.layout2);
layout3 = (RelativeLayout) findViewById(R.id.layout3);
bodylayout = (RelativeLayout) findViewById(R.id.bodylayout);
tab1 = (ImageView) findViewById(R.id.tab1);
tab1.setOnClickListener(onClickListener);
tab2 = (ImageView) findViewById(R.id.tab2);
tab2.setOnClickListener(onClickListener);
tab3 = (ImageView) findViewById(R.id.tab3);
tab3.setOnClickListener(onClickListener);
RelativeLayout.LayoutParams rl = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
rl.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
first = new ImageView(this);
first.setTag("first");
first.setImageResource(R.drawable.topbar_select);
// 默认选中项
switch (current) {
case 1:
layout1.addView(first, rl);
current = R.id.tab1;
break;
case 2:
layout2.addView(first, rl);
current = R.id.tab2;
break;
case 3:
layout3.addView(first, rl);
current = R.id.tab3;
break;
default:
break;
}
View view = getLocalActivityManager().startActivity("index",
new Intent(MainActivity.this, Tab1.class))
.getDecorView();
bodylayout.addView(view);
}
private boolean isAdd = false; // 是否添加过 top_select
private int select_width; // top_select_width
private int select_height; // top_select_height
private int firstLeft; // 第一次添加后的左边距*****
private int startLeft; // 起始左边距
// 添加一个view,移除一个view
private void replace() {
switch (current) {
case R.id.tab1:
changeTop(layout1);
break;
case R.id.tab2:
changeTop(layout2);
break;
case R.id.tab3:
changeTop(layout3);
break;
default:
break;
}
}
private void changeTop(RelativeLayout relativeLayout){
ImageView old = (ImageView) relativeLayout.findViewWithTag("first");;
select_width = old.getWidth();
select_height = old.getHeight();
RelativeLayout.LayoutParams rl = new RelativeLayout.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();
ImageView iv = new ImageView(this);
iv.setTag("move");
iv.setImageResource(R.drawable.topbar_select);
layout.addView(iv , rl);
relativeLayout.removeView(old);
}
private OnClickListener onClickListener = new OnClickListener(){
public void onClick(View v) {
if(!isAdd){
replace(); // 初次使用移除old 添加新的top_select为RelativeLayout所使用
isAdd = true;
}
ImageView top_select = (ImageView) layout.findViewWithTag("move");
int tabLeft;
int endLeft = 0;
boolean run = false;
switch (v.getId()) {
case R.id.tab1:
if (current != R.id.tab1) {
// 中心位置
tabLeft = ((RelativeLayout) tab1.getParent()).getLeft() + tab1.getLeft() + tab1.getWidth() / 2;
// 最终位置
endLeft = tabLeft - select_width / 2;
current = R.id.tab1;
run = true;
bodylayout.removeAllViews();
View view = getLocalActivityManager().startActivity("index",
new Intent(MainActivity.this, Tab1.class))
.getDecorView();
bodylayout.addView(view);
}
break;
case R.id.tab2:
if (current != R.id.tab2) {
tabLeft = ((RelativeLayout) tab2.getParent()).getLeft() + tab2.getLeft() + tab2.getWidth() / 2;
endLeft = tabLeft - select_width / 2;
current = R.id.tab2;
run = true;
bodylayout.removeAllViews();
View view = getLocalActivityManager().startActivity("index",
new Intent(MainActivity.this, Tab2.class))
.getDecorView();
bodylayout.addView(view);
}
break;
case R.id.tab3:
if (current != R.id.tab3) {
tabLeft = ((RelativeLayout) tab3.getParent()).getLeft() + tab3.getLeft() + tab3.getWidth() / 2;
endLeft = tabLeft - select_width/2;
current = R.id.tab3;
run = true;
bodylayout.removeAllViews();
View view = getLocalActivityManager().startActivity("index",
new Intent(MainActivity.this, Tab3.class))
.getDecorView();
bodylayout.addView(view);
}
break;
default:
break;
}
if(run){
TranslateAnimation animation = new TranslateAnimation(startLeft, endLeft - firstLeft, 0, 0);
startLeft = endLeft - firstLeft; // 重新设定起始位置
animation.setDuration(400);
animation.setFillAfter(true);
top_select.bringToFront();
top_select.startAnimation(animation);
}
}
};
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/default_bg"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="6.0"
>
<RelativeLayout
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_gravity="center_vertical"
>
<ImageView
android:id="@+id/tab1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tab1"
android:layout_centerInParent="true"
/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_gravity="center_vertical"
>
<ImageView
android:id="@+id/tab2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tab2"
android:layout_centerInParent="true"
/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:layout_gravity="center_vertical"
>
<ImageView
android:id="@+id/tab3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tab3"
android:layout_centerInParent="true"
/>
</RelativeLayout>
</LinearLayout>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:background="#ffffff"
android:gravity="center"
android:id="@+id/bodylayout"
>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
/**
* @author 张兴业
* 邮箱:xy-zhang@163.com
* qq:363302850
*
*/
http://www.devdiv.com/home.php?mod=space&uid=14682&do=blog&id=3841
/**
* @author 张兴业
* 邮箱:xy-zhang@163.com
* qq:363302850
*
*/
分享到:
相关推荐
在UI开发中,仿QQ的滑动Tab是一种常见的设计模式,用于实现应用界面中的多页面切换,用户可以通过滑动Tab来浏览不同的内容区域。在Android平台上,我们可以利用Android SDK提供的组件和方法来实现这一功能。以下是对...
【仿QQ滑动Tab】是一种常见的移动应用设计模式,它在很多社交应用中都有所体现,比如我们熟知的QQ。这种设计模式旨在提供一个可滑动的底部导航栏,用户可以通过左右滑动来切换不同的功能模块,使得应用程序的界面...
在Android应用开发中,"仿qq的tab滑动"是一个常见的设计模式,它涉及到用户界面(UI)的设计和用户体验(UX)的优化。QQ作为一款流行的即时通讯软件,其Tab栏设计深受用户喜爱,它的特点是平滑的切换效果和直观的...
在Android开发中,"QQTAB效果"通常指的是模仿腾讯QQ应用中的标签栏滑动切换效果。这种效果赋予用户一种流畅、动态的交互体验,使得在应用的不同页面间切换更为直观和便捷。以下是对这个主题的详细解释: 一、QQTAB...
在UI开发中,第六、七、八篇的内容可能涉及到用户界面设计的各种技术和实践,这里主要讨论的是一个关于仿QQ滑动Tab的实现方法。在移动应用开发中,滑动Tab是一种常见的导航方式,用于在不同的内容区域之间切换,提供...
标题中的“仿微信QQTab界面,可点击可滑动”是指在移动应用开发中,创建一个类似微信或QQ顶部导航栏的用户界面设计。这种Tab界面通常包含多个可选的选项卡,用户可以通过点击或者左右滑动来切换不同的功能模块。这种...
【Android应用源码之QQTabDemo(高仿QQ2012滑动菜单)】是一个针对Android平台的开源项目,其主要目标是模仿QQ2012版本中的滑动菜单设计。这个项目对于Android开发者来说,是一个很好的学习资源,可以帮助他们理解和...
在这个项目"Orchid-02_基于Android Studio的仿QQ主界面UI界面"中,我们将探讨如何使用Android Studio来创建一个类似QQ主界面的用户界面。 首先,我们要了解【Android UI设计】的基本概念。Android UI设计主要依赖于...
在Android应用开发中,创建一个类似QQ的Tab切换动画效果是一项常见的需求,它可以提升用户体验,使界面更加生动有趣。这个“仿QQ--tab切换动画实例”提供了一个实用的解决方案,适用于那些希望在自己的应用中实现...
在Android应用开发中,"仿qqTab左右切换选项卡"是一种常见的用户界面设计,它能够为用户提供直观且易于导航的体验。QQ作为中国最流行的即时通讯软件,其应用中的Tab栏设计深受用户喜爱,因此很多开发者尝试在自己的...
总之,仿QQ的Tab显示的ImageButton是一个综合性的Android开发任务,涉及到UI设计、事件处理、视图切换等多个方面。开发者需要熟练运用Android SDK提供的工具和组件,同时结合良好的编程习惯和用户体验设计原则,才能...
综上所述,"仿QQ界面的Android开发"项目涵盖了Android UI设计、网络通信、数据库管理和数据持久化等多个核心知识点,是一个综合性的Android开发实践。通过这个项目,开发者不仅可以提升Android编程技能,还能深入...
在Android应用开发中,创建类似新浪微博或QQ2012中的Tab滑动效果是一项常见的需求。这个效果通常涉及到ViewPager组件的使用,它允许用户通过左右滑动或者点击Tab头标来在多个页面间切换。接下来,我们将深入探讨如何...
总之,“Android仿QQ主界面——完善篇”项目覆盖了Android开发中的多个关键知识点,包括`ViewPager`的使用、`Fragment`管理、UI设计、数据绑定和用户体验优化等,是提升Android开发技能的好实践。通过这个项目,...
在Android开发领域,为了提升用户体验,开发者们常常会借鉴知名应用的设计理念,QQ作为一款流行的即时通讯软件,其用户界面设计自然受到了很多关注。本文将深入解析“Android仿QQ最新界面源码”,帮助你理解如何在...
【描述】:“tab滑动效果”的实现涉及到了用户界面(UI)设计与用户体验(UX)的结合,它通过平滑的动画过渡,使用户能够轻松浏览和访问不同内容区域。在Android开发中,可以使用Android的TabLayout和ViewPager组件...
在Android应用开发中,底部Tab导航是一种常见的设计模式,它为用户提供了一种直观的方式来切换不同的功能模块。"底部Tab导航仿QQ"项目旨在模仿QQ应用的Tab导航样式,利用Fragment技术来实现。Fragment是Android SDK...
在Android应用开发中,滑动Tab标题栏是一种常见的设计模式,用于展示多个视图并允许用户通过滑动来切换不同的内容区域。这个标题栏通常与ViewPager结合使用,因为ViewPager能够轻松地管理多个Fragment或者布局,并且...
在Android应用开发中,设计一个吸引用户且具有良好用户体验的界面是非常...通过研究和实现"android仿闲鱼仿道聚城导航栏、发布动画",开发者可以提升自己的UI/UX设计技能,更好地理解和运用Android的组件及动画系统。
在Android应用开发中,创建一个类似微信的底部选项卡是一种常见的设计模式,它能提供良好的用户体验,让用户在多个功能之间快速切换。这个项目的核心在于利用`Fragment`、`ViewPager`和自定义布局来实现这一功能。...