ViewPager实现动画从入门到精通(二)---JazzyViewPager使用
来源:互联网 发布:沈阳纳森网络干什么的 编辑:程序博客网 时间:2024/06/18 14:22
今天我们一起学习GutHub上一个特别强大的开源库JazzyViewPager,顾名思义,首先它是由ViewPager 的功能,更重要的是它的动画功能。官网是这样解释的:
An easy to use ViewPager that adds an awesome set of custom swiping animations. Just change your ViewPagers toJazzyViewPagers, 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" />
0 0