学的到东西的事情是锻炼,学不到的是磨练。
本讲内容:QQ介面滑动
下面是效果面
下面是res/layout/activity_main.xml 布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.qq.MainActivity$PlaceholderFragment" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/default_bg" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="6.0" android:orientation="horizontal" > <RelativeLayout android:id="@+id/layout1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1.0" > <ImageView android:id="@+id/tab1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/tab1" /> </RelativeLayout> <RelativeLayout android:id="@+id/layout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1.0" > <ImageView android:id="@+id/tab2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/tab2" /> </RelativeLayout> <RelativeLayout android:id="@+id/layout3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1.0" > <ImageView android:id="@+id/tab3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/tab3" /> </RelativeLayout> </LinearLayout> <RelativeLayout android:id="@+id/bodylayout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1.0" android:background="#fff" android:gravity="center" android:orientation="horizontal" > </RelativeLayout> </LinearLayout></RelativeLayout>在3个relativelayout外面加个LinearLayout,然后3个relativelayout属性中设置android:layout_weight="1", 使之平均
下面是res/drawabel/tab1.xml
<?xml version="1.0" encoding="UTF-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/tab1_over" android:state_pressed="true"/> <item android:drawable="@drawable/tab1_normal" android:state_pressed="false"/> <!-- 用来区分点击前后,可以是俩张图片 --></selector>
下面是res/drawabel/tab2.xml
<?xml version="1.0" encoding="UTF-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/tab2_over" /> <item android:state_pressed="false" android:drawable="@drawable/tab2_normal" /></selector>
下面是res/drawabel/tab3.xml
<?xml version="1.0" encoding="UTF-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/tab3_over" /> <item android:state_pressed="false" android:drawable="@drawable/tab3_normal" /></selector>
下面是res/layout/tab1.xml 布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/splash" /></LinearLayout>
下面是res/layout/tab2.xml 布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/imageView2" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/splash2"/></LinearLayout>
下面是res/layout/tab3.xml 布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/imageView3" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/splash3"/></LinearLayout>
下面是MainActivity.java主界面文件:
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;//默认选中第一个,可以动态的改变此参数值 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_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); tab2=(ImageView) findViewById(R.id.tab2); tab3=(ImageView) findViewById(R.id.tab3); tab1.setOnClickListener(onClickListener); tab2.setOnClickListener(onClickListener); tab3.setOnClickListener(onClickListener); RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); p.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, p); current=R.id.tab1; break; case 2: layout2.addView(first, p); current = R.id.tab2; break; case 3: layout3.addView(first, p); 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 p=new RelativeLayout.LayoutParams(select_width, select_height); p.leftMargin = old.getLeft() + ((RelativeLayout)old.getParent()).getLeft(); p.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 , p); 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); } } };}
下面是Tab1.java界面文件:
public class Tab1 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab1); }}
下面是Tab2.java界面文件:
public class Tab2 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab2); }}
下面是Tab3.java界面文件:
public class Tab3 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab3); }}
本讲就到这里,Take your time and enjoy it