zoukankan      html  css  js  c++  java
  • 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
    *
    */

  • 相关阅读:
    flutter填坑之旅(widget原理篇)
    二次封装Element UI Table实现动态列
    vue使用import()提示语法错误
    flutter填坑之旅(配置本地资源文件)
    vue项目提示TypeError: e.call is not a function
    fork树
    从标准输入读取一行数组并保存(用的是字符串分割函数strtok_s() )
    常用算法链接:
    排序算法
    牛客网未通过代码---
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168174.html
Copyright © 2011-2022 走看看