`
xyz_lmn
  • 浏览: 65503 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android UI开发第六篇——仿QQ的滑动Tab

 
阅读更多

代码下载地址: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

    在UI开发中,仿QQ的滑动Tab是一种常见的设计模式,用于实现应用界面中的多页面切换,用户可以通过滑动Tab来浏览不同的内容区域。在Android平台上,我们可以利用Android SDK提供的组件和方法来实现这一功能。以下是对...

    仿QQ滑动Tab

    【仿QQ滑动Tab】是一种常见的移动应用设计模式,它在很多社交应用中都有所体现,比如我们熟知的QQ。这种设计模式旨在提供一个可滑动的底部导航栏,用户可以通过左右滑动来切换不同的功能模块,使得应用程序的界面...

    仿qq的tab滑动

    在Android应用开发中,"仿qq的tab滑动"是一个常见的设计模式,它涉及到用户界面(UI)的设计和用户体验(UX)的优化。QQ作为一款流行的即时通讯软件,其Tab栏设计深受用户喜爱,它的特点是平滑的切换效果和直观的...

    android QQTAB效果

    在Android开发中,"QQTAB效果"通常指的是模仿腾讯QQ应用中的标签栏滑动切换效果。这种效果赋予用户一种流畅、动态的交互体验,使得在应用的不同页面间切换更为直观和便捷。以下是对这个主题的详细解释: 一、QQTAB...

    UI开发第六。七。八篇

    在UI开发中,第六、七、八篇的内容可能涉及到用户界面设计的各种技术和实践,这里主要讨论的是一个关于仿QQ滑动Tab的实现方法。在移动应用开发中,滑动Tab是一种常见的导航方式,用于在不同的内容区域之间切换,提供...

    仿微信QQTab界面,可点击可滑动

    标题中的“仿微信QQTab界面,可点击可滑动”是指在移动应用开发中,创建一个类似微信或QQ顶部导航栏的用户界面设计。这种Tab界面通常包含多个可选的选项卡,用户可以通过点击或者左右滑动来切换不同的功能模块。这种...

    Android应用源码之QQTabDemo(高仿QQ2012滑动菜单).rar

    【Android应用源码之QQTabDemo(高仿QQ2012滑动菜单)】是一个针对Android平台的开源项目,其主要目标是模仿QQ2012版本中的滑动菜单设计。这个项目对于Android开发者来说,是一个很好的学习资源,可以帮助他们理解和...

    Orchid-02_基于Android Studio的仿QQ主界面UI界面.zip

    在这个项目"Orchid-02_基于Android Studio的仿QQ主界面UI界面"中,我们将探讨如何使用Android Studio来创建一个类似QQ主界面的用户界面。 首先,我们要了解【Android UI设计】的基本概念。Android UI设计主要依赖于...

    仿QQ--tab切换动画实例

    在Android应用开发中,创建一个类似QQ的Tab切换动画效果是一项常见的需求,它可以提升用户体验,使界面更加生动有趣。这个“仿QQ--tab切换动画实例”提供了一个实用的解决方案,适用于那些希望在自己的应用中实现...

    仿qqTab左右切换选项卡

    在Android应用开发中,"仿qqTab左右切换选项卡"是一种常见的用户界面设计,它能够为用户提供直观且易于导航的体验。QQ作为中国最流行的即时通讯软件,其应用中的Tab栏设计深受用户喜爱,因此很多开发者尝试在自己的...

    仿QQ的Tab显示的ImageButton

    总之,仿QQ的Tab显示的ImageButton是一个综合性的Android开发任务,涉及到UI设计、事件处理、视图切换等多个方面。开发者需要熟练运用Android SDK提供的工具和组件,同时结合良好的编程习惯和用户体验设计原则,才能...

    仿QQ界面的Android开发

    综上所述,"仿QQ界面的Android开发"项目涵盖了Android UI设计、网络通信、数据库管理和数据持久化等多个核心知识点,是一个综合性的Android开发实践。通过这个项目,开发者不仅可以提升Android编程技能,还能深入...

    像新浪微博的Tab,qq2012的Tab滑动效果

    在Android应用开发中,创建类似新浪微博或QQ2012中的Tab滑动效果是一项常见的需求。这个效果通常涉及到ViewPager组件的使用,它允许用户通过左右滑动或者点击Tab头标来在多个页面间切换。接下来,我们将深入探讨如何...

    Android仿QQ主界面-------完善篇

    总之,“Android仿QQ主界面——完善篇”项目覆盖了Android开发中的多个关键知识点,包括`ViewPager`的使用、`Fragment`管理、UI设计、数据绑定和用户体验优化等,是提升Android开发技能的好实践。通过这个项目,...

    Android仿QQ最新界面源码

    在Android开发领域,为了提升用户体验,开发者们常常会借鉴知名应用的设计理念,QQ作为一款流行的即时通讯软件,其用户界面设计自然受到了很多关注。本文将深入解析“Android仿QQ最新界面源码”,帮助你理解如何在...

    tab滑动效果

    【描述】:“tab滑动效果”的实现涉及到了用户界面(UI)设计与用户体验(UX)的结合,它通过平滑的动画过渡,使用户能够轻松浏览和访问不同内容区域。在Android开发中,可以使用Android的TabLayout和ViewPager组件...

    底部Tab导航仿QQ

    在Android应用开发中,底部Tab导航是一种常见的设计模式,它为用户提供了一种直观的方式来切换不同的功能模块。"底部Tab导航仿QQ"项目旨在模仿QQ应用的Tab导航样式,利用Fragment技术来实现。Fragment是Android SDK...

    滑动tab标题栏实现

    在Android应用开发中,滑动Tab标题栏是一种常见的设计模式,用于展示多个视图并允许用户通过滑动来切换不同的内容区域。这个标题栏通常与ViewPager结合使用,因为ViewPager能够轻松地管理多个Fragment或者布局,并且...

    android仿闲鱼仿道聚城导航栏、发布动画

    在Android应用开发中,设计一个吸引用户且具有良好用户体验的界面是非常...通过研究和实现"android仿闲鱼仿道聚城导航栏、发布动画",开发者可以提升自己的UI/UX设计技能,更好地理解和运用Android的组件及动画系统。

    android仿微信底部选项卡(可滑动)

    在Android应用开发中,创建一个类似微信的底部选项卡是一种常见的设计模式,它能提供良好的用户体验,让用户在多个功能之间快速切换。这个项目的核心在于利用`Fragment`、`ViewPager`和自定义布局来实现这一功能。...

Global site tag (gtag.js) - Google Analytics