ViewPager与PagerAdapter

ViewPager是一个可以用来滑动内部View的组件,他有一个老搭档PagerAdapter,我们这次就来看看他们这两位拍档的本事。

我们要使用ViewPager与PagerAdapter结合



首先布局文件

<android.support.v4.view.ViewPager

        android:id="@+id/viewpager"

        android:layout_width="match_parent"

        android:layout_height="match_parent">

然后实现自己的adapter继承PagerAdapter。实现PagerAdapter的方法

1、public int getCount();//获取总View的数量

2、public void startUpdate(ViewGroup container)  ;3、public Object instantiateItem(ViewGroup container, int position)  ; //实例化当前的View,添加到contrainer中,然后返回生成的View或关联的Object (用于在isViewFromObject中检查)

4、public void destroyItem(ViewGroup container, int position, Object object); //从container中移除指定的View (释放内存)5、public void finishUpdate(ViewGroup container)  ;

6、 public boolean isViewFromObject(View view, Object object) ;// 检查View是否与一个Object关联,

下面展示一下demo



16583158-400b322d05bdab58.gif

package com.example.communityfunction.myView;import java.util.List;import android.animation.Animator;import android.animation.Animator.AnimatorListener;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.app.ActionBar.LayoutParams;import android.content.Context;import android.graphics.Bitmap;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ImageView;publicclassImgViewPagerAdapterextends PagerAdapter

{

    privateList imgBm;

    private Context mContext;

    private ViewPager pager;


    publicImgViewPagerAdapter(Context context,ListimgBm,ViewPager pager)

    {

        this.imgBm=imgBm;

        this.mContext=context;

        this.pager=pager;

    }

    @Override

    publicint getCount()

    {

        return imgBm.size();

    }

    @Override

    publicObject instantiateItem(finalViewGroup container,int position)

    {

        ImageView imageView=new ImageView(mContext);

        imageView.setImageBitmap(imgBm.get(position));

        container.addView(imageView,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

        imageView.setOnClickListener(new OnClickListener()

        {

            @Override

            publicvoid onClick(View v)

            {

                startAnim();

            }

        });

        returnimageView;    }

  // PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁

@Override publicvoiddestroyItem(ViewGroup container,intposition, Object object)

{ container.removeView((View)object); };

@Override

publicbooleanisViewFromObject(View arg0, Object arg1)

{

returnarg0==arg1;//官方提示写法}

/*

    *动画效果

    */


publicvoid startAnim()

    {

        AnimatorSet animSet =new AnimatorSet();

        animSet.play(ObjectAnimator.ofFloat(pager, "alpha", 1.0f,0f))

        .with(ObjectAnimator.ofFloat(pager, "scaleX",1.0f,0f))

        .with(ObjectAnimator.ofFloat(pager, "scaleY",1.0f,0f));

        animSet.setDuration(400);

        animSet.start();

        animSet.addListener(new AnimatorListener() {

            @Override

            publicvoid onAnimationStart(Animator animation) {}

            @Override

            publicvoid onAnimationRepeat(Animator animation) {}

            @Override

            publicvoid onAnimationEnd(Animator animation)

            {

                pager.setVisibility(View.GONE);

            }

            @Override

            publicvoid onAnimationCancel(Animator animation){}

        });

    }

}

16583158-dc99f74a1879e7b6.gif

 注意:

在ViewPager 外面嵌套ScrollView 时,发现ViewPager中的元素显示不出来。

解决办法:

在ScrollView节点指定android:fillviewport="true"

转载于:https://www.jianshu.com/p/6c8a7e5d21f6

猜你喜欢

转载自blog.csdn.net/weixin_33744141/article/details/91141319
今日推荐