先贴出来效果图(切换每个Tab键,页面跟随变化,效果图蓝条增加用户体验)
首先看整体效果图的布局文件吧(很简单,就三部分,分别是Tab栏目、定位蓝条、各个页面(是V4包下的ViewPager))
activity_tab_winter_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF969696" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="45.0dip" android:background="#FFDFD7D7" > <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text="\n广告" android:textColor="#000000" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text="\n选项" android:textColor="#000000" /> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:gravity="center" android:text="\n关于作者" android:textColor="#000000" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/icon_tab_winter_a" /> <android.support.v4.view.ViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="center" android:layout_weight="1.0" android:background="#FFDFD7D7" android:flipInterval="30" android:persistentDrawingCache="animation" /> </LinearLayout>
接下来贴出每个页面的布局文件
activity_tab_winter_lay1.xml--activity_tab_winter_lay2.xml---activity_tab_winter_lay3.xml(三个页面是一样的,就是text内容不一样,这样好区分)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFDFD7D7" android:orientation="vertical" > <Button android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="广告" /> </LinearLayout>
MainActivity(思路简单,代码有注释)
package com.example.viewpagerdemo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends Activity { private ViewPager mPager;// 页卡内容 private List<View> listViews; // Tab页面列表 private TextView t1, t2, t3;// 页卡头标 private int currIndex = 0;// 当前页卡编号 private ImageView cursor;// 动画图片 private int bmpW;// 动画图片宽度 private int offset = 0;// 动画图片偏移量 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_winter_main); //初始化三部分 InitImageView(); InitTextView(); InitViewPager(); } /** * 初始化动画 */ private void InitImageView() { //获取空间 cursor = (ImageView) findViewById(R.id.cursor); // 获取图片宽度 bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.icon_tab_winter_a).getWidth(); //得到屏幕宽度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenW = dm.widthPixels; // 计算偏移量 offset = (screenW / 3 - bmpW) / 2; Matrix matrix = new Matrix(); matrix.postTranslate(offset, 0); // 设置动画初始位置 cursor.setImageMatrix(matrix); } /** * 初始化头标 */ private void InitTextView() { t1 = (TextView) findViewById(R.id.text1); t2 = (TextView) findViewById(R.id.text2); t3 = (TextView) findViewById(R.id.text3); //添加监听事件 t1.setOnClickListener(new MyOnClickListener(0)); t2.setOnClickListener(new MyOnClickListener(1)); t3.setOnClickListener(new MyOnClickListener(2)); } /** * 初始化ViewPager */ private void InitViewPager() { //viewPager mPager = (ViewPager) findViewById(R.id.vPager); //data listViews = new ArrayList<View>(); LayoutInflater mInflater = getLayoutInflater(); listViews.add(mInflater .inflate(R.layout.activity_tab_winter_lay2, null)); listViews.add(mInflater .inflate(R.layout.activity_tab_winter_lay1, null)); listViews.add(mInflater .inflate(R.layout.activity_tab_winter_lay3, null)); //adapter mPager.setAdapter(new MyPagerAdapter(listViews)); mPager.setCurrentItem(0); //监听事件 mPager.setOnPageChangeListener(new MyOnPageChangeListener()); } /** * ViewPager适配器 */ public class MyPagerAdapter extends PagerAdapter { public List<View> mListViews; public MyPagerAdapter(List<View> mListViews) { this.mListViews = mListViews; } @Override public void destroyItem(View view, int position, Object arg2) { ((ViewPager) view).removeView(mListViews.get(position)); } @Override public void finishUpdate(View arg0) { } @Override public int getCount() { return mListViews.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mListViews.get(position)); return mListViews.get(position); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) { } } /** * 头标点击监听 */ public class MyOnClickListener implements View.OnClickListener { private int index = 0; public MyOnClickListener(int i) { index = i; } public void onClick(View v) { mPager.setCurrentItem(index); } }; /** * 页卡切换监听 */ public class MyOnPageChangeListener implements OnPageChangeListener { int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量 int two = one * 2;// 页卡1 -> 页卡3 偏移量 public void onPageSelected(int position) { Animation animation = null; switch (position) { case 0: if (currIndex == 1) { animation = new TranslateAnimation(one, 0, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, 0, 0, 0); } break; case 1: if (currIndex == 0) { animation = new TranslateAnimation(offset, one, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, one, 0, 0); } break; case 2: if (currIndex == 0) { animation = new TranslateAnimation(offset, two, 0, 0); } else if (currIndex == 1) { animation = new TranslateAnimation(one, two, 0, 0); } break; } currIndex = position; animation.setFillAfter(true); animation.setDuration(300); cursor.startAnimation(animation); } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageScrollStateChanged(int arg0) { } } }
时间: 2024-10-07 03:19:27