package com.sogou.sogouchat.ui; import java.util.ArrayList; import com.sogou.sogouchat.R; import com.sogou.sogouchat.SogouChatApp; import android.os.Build; import android.os.Bundle; import android.content.Context; import android.content.res.Resources; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.drawable.Drawable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.TabHost; import android.widget.TabHost.TabSpec; import android.widget.TabWidget; import android.widget.TableLayout.LayoutParams; import android.widget.TextView; public class TabMainActivity extends FragmentActivity { public TabHost mTabHost; ViewPager mViewPager; TabsAdapter mTabsAdapter; static ImageView mTabCur; private int mOffset = 0;// 动画图片偏移量 private int mTabIndex = 0;// 当前页卡编号 private int mBmpW;// 动画图片宽度 private int mTotalNewMsgCnt; private BadgeView mTotalNewBadge; SogouChatApp mApp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_tab); mApp = (SogouChatApp) getApplication(); mApp.mTabMain = this; mTabHost = (TabHost)findViewById(android.R.id.tabhost); mTabHost.setup(); mViewPager = (ViewPager)findViewById(R.id.pager); mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager); Resources res = getResources(); Drawable smsImage = res.getDrawable(R.drawable.tab_sms); Drawable contactImage = res.getDrawable(R.drawable.tab_contact); // mTabCur =(ImageView)findViewById(R.id.tab_cursor); // if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) { // //TODO:如果当前版本大于FROYO版本,即2.2版本 // mTabCur.setVisibility(View.GONE); // mTabCur = null; // } // else{ // InitCurImageView(); // } mTabsAdapter.addTab(mTabHost.newTabSpec("NewsList").setIndicator("消息", smsImage), NewsListFragment.class, null); mTabsAdapter.addTab(mTabHost.newTabSpec("PhoneBook").setIndicator("电话薄", contactImage), ContactListFragment.class, null); for (int i = 0; i < mTabHost.getTabWidget().getChildCount(); i++) { TextView textView = (TextView)mTabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); textView.setTextSize(16); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.rgb(0x33, 0xb5, 0xe5)); textView.getLayoutParams().height = LayoutParams.MATCH_PARENT; textView.getLayoutParams().width = LayoutParams.MATCH_PARENT; } mTabHost.getTabWidget().setVisibility(View.GONE); // View newsTab = mTabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title); // mTotalNewBadge = new BadgeView(this, newsTab); // mTotalNewMsg.show(); } private void InitCurImageView() { // mBmpW = BitmapFactory.decodeResource(getResources(), R.drawable.tab_cur) // .getWidth();// 获取图片宽度 // DisplayMetrics dm = new DisplayMetrics(); // getWindowManager().getDefaultDisplay().getMetrics(dm); // int screenW = dm.widthPixels;// 获取分辨率宽度 // int tabCnt = mTabsAdapter.getCount(); // mOffset = (screenW /tabCnt - mBmpW) / tabCnt;// 计算偏移量 // Matrix matrix = new Matrix(); // matrix.postTranslate(mOffset, 0); // mTabCur.setImageMatrix(matrix);// 设置动画初始位置 } public static class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener { private final Context mContext; private final TabHost mTabHost; private final ViewPager mViewPager; private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); static final class TabInfo { private final String tag; private final Class<?> clss; private final Bundle args; TabInfo(String _tag, Class<?> _class, Bundle _args) { tag = _tag; clss = _class; args = _args; } } static class ChatTabFactory implements TabHost.TabContentFactory { private final Context mContext; public ChatTabFactory(Context context) { mContext = context; } @Override public View createTabContent(String tag) { View v = new View(mContext); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } public TabsAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager) { super(activity.getSupportFragmentManager()); mContext = activity; mTabHost = tabHost; mViewPager = pager; mTabHost.setOnTabChangedListener(this); mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) { tabSpec.setContent(new ChatTabFactory(mContext)); String tag = tabSpec.getTag(); TabInfo info = new TabInfo(tag, clss, args); mTabs.add(info); mTabHost.addTab(tabSpec); notifyDataSetChanged(); } @Override public int getCount() { return mTabs.size(); } @Override public Fragment getItem(int position) { TabInfo info = mTabs.get(position); return Fragment.instantiate(mContext, info.clss.getName(), info.args); } @Override public void onTabChanged(String tabId) { int position = mTabHost.getCurrentTab(); mViewPager.setCurrentItem(position); } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int position) { TabWidget widget = mTabHost.getTabWidget(); int oldFocusability = widget.getDescendantFocusability(); widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); mTabHost.setCurrentTab(position); widget.setDescendantFocusability(oldFocusability); // if (mTabCur != null){ // int fromX, toX; // if (position == 0){ // fromX = 240; // toX = 0; // } // else { // fromX = 0; // toX = 240; // } // Animation animation = new TranslateAnimation(fromX, toX , 0, 0); // animation.setDuration(300); // animation.setFillAfter(true); // mTabCur.startAnimation(animation); // } } } public void setTotalNewMsgCnt(int cnt){ // mTotalNewMsgCnt = cnt; // if (mTotalNewMsgCnt > 0){ // mTotalNewBadge.setText(String.valueOf(mTotalNewMsgCnt) ); // mTotalNewBadge.show(); // } } public void setTotalNewMsgCntDelta(String tel, int delta){ mTotalNewMsgCnt -= delta; if (mTotalNewMsgCnt > 0){ mTotalNewBadge.setText(String.valueOf(mTotalNewMsgCnt) ); mTotalNewBadge.show(); } } public void switchToContact(){ mTabHost.setCurrentTab(1); } }