Fragment+ViewPager實現類似ActionBar切換的效果
阿新 • • 發佈:2019-01-07
使用Fragment+ViewPager實現類似網易新聞客戶端的多頁面左右滑動切換的效果,需要有android.support.v4的支援包,可以相容Android 2.0以上版本,具體程式碼如下:
private TextView mWealthRank_tv; private TextView mMostRank_tv; private TextView mNewRank_tv; private ViewPager mPager; private int mCurrentPage = 0; private ImageView image; private int bmpW;// 滑塊寬度 private int offset;// 滑塊偏移量 private ArrayList<Fragment> fragmentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rankcategory); mWealthRank_tv = (TextView) findViewById(R.id.wealth_tag); mMostRank_tv = (TextView) findViewById(R.id.most_tag); mNewRank_tv = (TextView) findViewById(R.id.new_tag); mPager = (ViewPager) findViewById(R.id.viewPager); mWealthRank_tv.setOnClickListener(this); mMostRank_tv.setOnClickListener(this); mNewRank_tv.setOnClickListener(this); InitImage(); initViewPager(); } private void initViewPager() { fragmentList = new ArrayList<Fragment>(); Fragment fragment0 = WealthRankFragment.newInstance("1"); Fragment fragment1 = WealthRankFragment.newInstance("2"); Fragment fragment2 = WealthRankFragment.newInstance("3"); fragmentList.add(fragment0); fragmentList.add(fragment1); fragmentList.add(fragment2); mPager.setAdapter(new MyFragmentPagerAdapter( getSupportFragmentManager(), fragmentList)); mPager.setCurrentItem(0); mPager.setOnPageChangeListener(new MyOnPageChangeListener()); mPager.setOffscreenPageLimit(2); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.wealth_tag: mPager.setCurrentItem(0);// 預設viewPager首頁 break; case R.id.most_tag: mPager.setCurrentItem(1); break; case R.id.new_tag: mPager.setCurrentItem(2); break; default: break; } } class MyOnPageChangeListener implements OnPageChangeListener { private int one = offset * 2 + bmpW; @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageSelected(int arg0) { Animation animation = new TranslateAnimation(mCurrentPage * one, arg0 * one, 0, 0); mCurrentPage = arg0; mPager.setCurrentItem(mCurrentPage); animation.setFillAfter(true); animation.setDuration(200); image.startAnimation(animation); } } public void InitImage() { image = (ImageView) findViewById(R.id.cursor); bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.cursor) .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); image.setImageMatrix(matrix); }
Fragment類:
private static final String TAG = "WealthRankFragment"; private RankDataAdapter adapter; private String query_type = "0"; private ArrayList<CoinsRank> ranks = new ArrayList<CoinsRank>(); private Context mContext = null; private ListView mListView; public static WealthRankFragment newInstance(String type) { WealthRankFragment newFragment = new WealthRankFragment(); Bundle bundle = new Bundle(); bundle.putString("Type", type); newFragment.setArguments(bundle); return newFragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity().getParent(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG, "TestFragment-----onCreateView"); Bundle args = getArguments(); query_type = args != null ? args.getString("Type") : "0"; View view = inflater.inflate(R.layout.ranklist, container, false); mListView = (ListView) view.findViewById(R.id.lv); String type = ""; if (query_type.equals("1")) { type = "1"; } else if (query_type.equals("2")) { type = "2"; } else if (query_type.equals("3")) { type = "3"; } getRankListAction(type); return view; } @Override public void onResume() { super.onResume(); } private void getRankListAction(String type) { 具體資料,可自定義 } @Override public void onDestroy() { super.onDestroy(); } @Override public void onDestroyView() { super.onDestroyView(); }