今天我们一起学习GutHub上一个特别强大的开源库JazzyViewPager,顾名思义,首先它是由ViewPager 的功能,更重要的是它的动画功能。官网是这样解释的:
An easy to use ViewPager that adds an awesome set of custom swiping animations. Just change your ViewPagers to JazzyViewPagers, two more steps, and you're good to Go !
即一个易用的ViewPager ,它有惊人的自定义切换动画。你只需将原来的ViewPager换成JazzyViewPagers,再做两部,就可以拥有,下面我们一起看看它的用法吧。
有兴趣的可以去官网学习哦 https://github.com/jfeinstein10/JazzyViewPager
当然学习之前先看看效果:
JazzyViewPager的各类动画封装在TransitionEffect
public enum TransitionEffect { Standard, Tablet, CubeIn, CubeOut, Flip, Stack, ZoomIn, ZoomOut, RotateUp, RotateDown, Accordion }
我们如果想要使用某个动画的话,只需要两部就可心想事成。
1.调用setTransitionEffect(TransitionEffect.*)选择动画类型 如下所示:
private JazzyViewPager mJazzy; /* ... */ mJazzy.setTransitionEffect(TransitionEffect.*);
2.修改PagerAdapter,在addview后调用mJazzy.setObjectForPosition(obj, position);
private JazzyViewPager mJazzy; /* ... */ @Override public Object instantiateItem(ViewGroup container, final int position) { Object obj = super .instantiateItem(container, position); mJazzy.setObjectForPosition(obj, position); return obj; }
代码附上:
MainActivity
public class MainActivity extends Activity { private JazzyViewPager mJazzy; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setupJazziness(TransitionEffect.Tablet); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add("Toggle Fade"); String[] effects = this .getResources().getStringArray(R.array.jazzy_effects); for (String effect : effects) menu.add(effect); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getTitle().toString().equals("Toggle Fade")) { mJazzy.setFadeEnabled(!mJazzy.getFadeEnabled()); } else { TransitionEffect effect = TransitionEffect .valueOf(item.getTitle().toString()); setupJazziness(effect); } return true; } private void setupJazziness(TransitionEffect effect) { mJazzy = (JazzyViewPager) findViewById(R.id.jazzy_pager); mJazzy.setTransitionEffect(effect);//设置选择的动画效果 mJazzy.setAdapter(new MainAdapter()); mJazzy.setPageMargin(30);//设置页与页之间的间距 } private class MainAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, final int position) { TextView text = new TextView(MainActivity.this); text.setGravity(Gravity.CENTER); text.setTextSize(30); text.setTextColor(Color.WHITE); text.setText("Page " + position); text.setPadding(30, 30, 30, 30); int bg = Color .rgb((int) Math.floor(Math.random()*128)+64, (int) Math.floor(Math.random()*128)+64, (int) Math.floor(Math.random()*128)+64); text.setBackgroundColor(bg); container.addView(text, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); mJazzy.setObjectForPosition(text, position);//保存view return text; } @Override public void destroyItem(ViewGroup container, int position, Object obj) { container.removeView(mJazzy.findViewFromObject(position)); } @Override public int getCount() { return 10; } @Override public boolean isViewFromObject(View view, Object obj) { if (view instanceof OutlineContainer) { return ((OutlineContainer) view).getChildAt(0) == obj; } else { return view == obj; } } } }
activity_main.xml
< com.jfeinstein.jazzyviewpager.JazzyViewPager xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:app = "http://schemas.android.com/apk/res-auto" android:id = "@+id/jazzy_pager" android:layout_width = "match_parent" android:layout_height = "match_parent" />