Android UI開発第六編、QQを模倣したスライドTab


Android UI开发第六篇——仿QQ的滑动Tab_第1张图片
 
コードのダウンロード先: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張興業*メールボックス:[email protected]*qq:363302850*/
http://www.devdiv.com/home.php?mod=space&uid=14682&do=blog&id=3841
//**@author張興業*メールボックス:[email protected]*qq:363302850*/