使用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();
}