Android控制項學習(四):ViewPager和TabHost結合Java代碼,viewpagertabhost

來源:互聯網
上載者:User

Android控制項學習(四):ViewPager和TabHost結合Java代碼,viewpagertabhost

  import java.util.ArrayList;

  import java.util.List;

  import android.app.LocalActivityManager;

  import android.app.TabActivity;

  import android.content.Context;

  import android.content.Intent;

  importandroid.graphics.BitmapFactory;

  import android.graphics.Matrix;

  import android.os.Bundle;

  import android.os.Parcelable;

  import android.support.v4.view.PagerAdapter;

  importandroid.support.v4.view.ViewPager;

  importandroid.support.v4.view.ViewPager.OnPageChangeListener;

  import android.util.DisplayMetrics;

  import android.util.Log;

  import android.view.View;

  import android.view.Window;

  importandroid.view.animation.Animation;

  importandroid.view.animation.TranslateAnimation;

  import android.widget.ImageView;

  import android.widget.TabHost;

  import android.widget.TextView;

  public class AniTestActivity extends TabActivity {

  //頁卡內容

  private ViewPager mPager;

  // Tab頁面列表

  private List listViews;

  // 動畫圖片

  private ImageView cursor;

  // 頁卡頭標

  private TextView t1, t2, t3;

  // 動畫圖片位移量

  private int offset = 0;

  // 當前頁卡編號

  private int currIndex = 0;

  // 動畫圖片寬度

  private int bmpW;

  private LocalActivityManager manager = null;

  private final static String TAG = "ConfigTabActivity";

  private final Context context = AniTestActivity.this;

  private TabHost mTabHost;

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  Log.d(TAG, "---onCreate---");

  requestWindowFeature(Window.FEATURE_NO_TITLE);

  setContentView(R.layout.main);

  mTabHost = getTabHost();

  mTabHost.addTab(mTabHost.newTabSpec("A").setIndicator(

  "").setContent(

  new Intent(this, A.class)));

  mTabHost.addTab(mTabHost.newTabSpec("B").setIndicator(

  "").setContent(

  new Intent(this, B.class)));

  mTabHost.addTab(mTabHost.newTabSpec("C").setIndicator(

  "").setContent(

  new Intent(this, C.class)));

  mTabHost.setCurrentTab(0);

  manager = new LocalActivityManager(this, true);

  manager.dispatchCreate(savedInstanceState);

  InitImageView();

  InitTextView();

  InitViewPager();

  }

  private void InitTextView() {

  t1 = (TextView) findViewById(R.id.text1);

  t2 = (TextView) findViewById(R.id.text2);

  t3 = (TextView) findViewById(R.id.text3);

  t1.setOnClickListener(newMyOnClickListener(0));

  t2.setOnClickListener(newMyOnClickListener(1));

  t3.setOnClickListener(newMyOnClickListener(2));

  }

  private void InitViewPager() {

  mPager = (ViewPager) findViewById(R.id.vPager);

  listViews = new ArrayList();

  MyPagerAdapter mpAdapter = new MyPagerAdapter(listViews);

  Intent intent = new Intent(context, A.class);

  listViews.add(getView("Black", intent));

  Intent intent2 = new Intent(context, B.class);

  listViews.add(getView("Gray", intent2));

  Intent intent3 = new Intent(context, C.class);

  listViews.add(getView("White", intent3));

  mPager.setAdapter(mpAdapter);

  mPager.setCurrentItem(0);

  mPager.setOnPageChangeListener(newMyOnPageChangeListener());

  }

  private void InitImageView() {

  cursor = (ImageView) findViewById(R.id.cursor);

  bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a4)

  .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);// 設定動畫初始位置

  }

  public class MyPagerAdapter extends PagerAdapter {

  public List mListViews;

  publicMyPagerAdapter(List mListViews) {

  this.mListViews = mListViews;

  }

  @Override

  public void destroyItem(View arg0, int arg1, Object arg2) {

  ((ViewPager) arg0).removeView(mListViews.get(arg1));

  }

  @Override

  public void finishUpdate(View arg0) {

  }

  @Override

  public int getCount() {

  return mListViews.size();

  }

  @Override

  public Object instantiateItem(View arg0, int arg1) {

  ((ViewPager) arg0).addView(mListViews.get(arg1), 0);

  return mListViews.get(arg1);

  }

  @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 implementsView.OnClickListener {

  private int index = 0;

  public MyOnClickListener(int i) {

  index = i;

  }

  @Override

  public void onClick(View v) {

  mPager.setCurrentItem(index);

  }

  };

  public class MyOnPageChangeListener implementsOnPageChangeListener {

  int one = offset * 2 + bmpW;// 頁卡1 -> 頁卡2 位移量

  int two = one * 2;// 頁卡1 -> 頁卡3 位移量

  @Override

  public void onPageSelected(int arg0) {

  Animation animation = null;

  Intent intent = new Intent();

  switch (arg0) {

  case 0:

  Log.d(TAG, "---0---");

  mTabHost.setCurrentTab(0);

  if (currIndex == 1) {

  animation = newTranslateAnimation(one, 0, 0, 0);

  } else if (currIndex == 2) {

  animation = newTranslateAnimation(two, 0, 0, 0);

  }

  break;

  case 1:

  Log.d(TAG, "---1---");

  mTabHost.setCurrentTab(1);

  if (currIndex == 0) {

  animation = newTranslateAnimation(offset, one, 0, 0);

  } else if (currIndex == 2) {

  animation = new TranslateAnimation(two, one, 0, 0);

  }

  break;

  case 2:

  Log.d(TAG, "---2---");

  mTabHost.setCurrentTab(2);

  if (currIndex == 0) {

  animation = newTranslateAnimation(offset, two, 0, 0);

  } else if (currIndex == 1) {

  animation = newTranslateAnimation(one, two, 0, 0);

  }

  break;

  }

  currIndex = arg0;

  animation.setFillAfter(true);// True:圖片停在動畫結束位置

  animation.setDuration(300);

  cursor.startAnimation(animation);

  }

  @Override

  public void onPageScrolled(int arg0, float arg1, int arg2) {

  }

  @Override

  public void onPageScrollStateChanged(int arg0) {

  }

  }

  private View getView(String id,Intent intent)

  {

  return manager.startActivity(id, intent).getDecorView();

  }

  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.