前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >viewpager实现画廊(中间图片全部显示,左右显示一部分b布局)无限轮播效果「建议收藏」

viewpager实现画廊(中间图片全部显示,左右显示一部分b布局)无限轮播效果「建议收藏」

作者头像
全栈程序员站长
发布2022-06-26 11:06:09
6260
发布2022-06-26 11:06:09
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

一、布局

代码语言:javascript
复制
<LinearLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:orientation="vertical"  android:layout_marginTop="10dp"  android:gravity="center_horizontal"  android:background="#FFFFFF"  android:clipChildren="false"  android:layerType="software"  >
代码语言:javascript
复制
<android.support.v4.view.ViewPager  android:id="@+id/vp"  android:layout_width="300dp"  android:layout_height="220dp"  android:layout_gravity="center"  android:clipChildren="false"  >

</android.support.v4.view.ViewPager>
代码语言:javascript
复制
</LinearLayout>

发现上面的RelativeLayout(可以用其它layout替换)和ViewPager的android:clipChildren都设置为了false。

android:clipChildren表示是否限制子View在其范围内,在animations动画以及本文的情况下可以发挥很大的作用。默认为true。

二、适配器

代码语言:javascript
复制
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.baway.chilijie.bean.Data;
import com.bumptech.glide.Glide;

import java.util.List;

/**  * Created by MacBook- on 2017/4/13.  */ public class MyViewpagerAdapter extends PagerAdapter {
    private List<Data.MyInfo.MyInfoList> myInfoLists;
    private Context context;
    private int xinWidth;
    private int xinHeight;

    public MyViewpagerAdapter(List<Data.MyInfo.MyInfoList> myInfoLists, Context context) {
       this.context=context;
        this.myInfoLists=myInfoLists;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView vp_iv= new ImageView(context);
        Glide.with(context).load(myInfoLists.get(position%myInfoLists.size()).getActivityImg()).into(vp_iv);
        container.addView(vp_iv);
        return vp_iv;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      container.removeView((View) object);
    }
}

三、自定义 PageTransformer类

代码语言:javascript
复制
import android.support.v4.view.ViewPager;
import android.view.View;

/**  * Created by MacBook- on 2017/4/14.  */ public class MyGallyPageTransformer implements ViewPager.PageTransformer {
    private static final float min_scale = 0.85f;
    @Override
    public void transformPage(View page, float position) {
        float scaleFactor = Math.max(min_scale, 1 - Math.abs(position));
        if (position < -1) {
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
        } else if (position < 0) {
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
        } else if (position >= 0 && position < 1) {
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
        } else if (position >= 1) {
            page.setScaleX(scaleFactor);
            page.setScaleY(scaleFactor);
        }
    }
}

四、Activity

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity{
代码语言:javascript
复制
private ViewPager vp;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
vp = (ViewPager) findViewById(R.id.vp);
vp.setOffscreenPageLimit(3);
int pagerWidth = (int) (getResources().getDisplayMetrics().widthPixels * 3.0f / 5.0f);
ViewGroup.LayoutParams lp = vp.getLayoutParams();
if (lp == null) {
    lp = new ViewGroup.LayoutParams(pagerWidth, ViewGroup.LayoutParams.MATCH_PARENT);
} else {
    lp.width = pagerWidth;
}
vp.setLayoutParams(lp);
//setPageMargin表示设置图片之间的间距 vp.setPageMargin(getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin));
vp.setPageTransformer(true,new MyGallyPageTransformer());
vp.setAdapter(new MyViewpagerAdapter(data.getActivityInfo().getActivityInfoList(),getActivity()));
vp.setCurrentItem(2000);
} }                                                      
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档