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

viewpager实现画廊(中间图片全部显示,左右显示一部分b布局)无限轮播效果「建议收藏」一、布局xmlversion=”1.0″encoding=”utf-8″?>RelativeLayoutxmlns:android=”http://schemas.android.com/apk/res/android”    android:id=”@+id/pager_layout”    android:layout_width=”match_

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

一、布局

<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"  >

<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>
</LinearLayout>

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

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

二、适配器

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类

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

public class MainActivity extends AppCompatActivity{
  
  
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);

} }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134031.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月7日 下午2:46
下一篇 2022年6月7日 下午3:00


相关推荐

  • 轨迹规划——Bezier曲线与B样条曲线

    轨迹规划——Bezier曲线与B样条曲线一、Bezier曲线1、Bezier曲线的背景给定n+1个数据点,p0~pn,生成一条曲线,使得该曲线与这些点描述的形状相符。(如果要求曲线通过所有数据点,则属于插值问题;如果只要求曲线逼近这些数据点,则属于逼近问题。)2、Bezier曲线的定义p(t)=∑i=0naifi,n(t)p(t)=\sum_{i=0}^na_if_{i,n}(t)p(t)=i=0∑n​ai​fi,n…

    2022年6月20日
    41
  • “AI孙悟空”对话全球!讯飞星火AI大模型展项亮相大阪世博会

    “AI孙悟空”对话全球!讯飞星火AI大模型展项亮相大阪世博会

    2026年3月14日
    2
  • MT4安卓版官网下载[通俗易懂]

    MT4安卓版官网下载[通俗易懂]目前,mt4因为特有的优势,吸引了许多投资者使用。MT4是目前最受欢迎的外汇交易平台。如果你的手机是安卓手机,要使用mt4交易,首先就得下载一个安卓版的软件。那么安卓如何下载呢。

    2022年8月15日
    10
  • 毕业两年,工作三年Java程序员的一点点体会与建议

    毕业两年,工作三年Java程序员的一点点体会与建议一 步入职业生涯从捡芝麻开始都说现在找工作难 我认为 是真的难 钱多活少离家近 大部分人的梦想 这样的工作确实很难找 我于 2016 年来到上海 那时我还没毕业 只不过因为觉得学校的生活足够的无聊与迷茫 于是提着行李箱就那样懵懵懂懂来到了这个数百万人梦寐以求的城市 上海 我心里很清楚 仅凭自己自学了半年的 Java 和前端知识不足以在魔都这样的城市吃饱饭 更不敢奢求生活 我对生活的定义是工作娱

    2026年3月18日
    2
  • PC机如何使用trunk口类型连接

    PC机如何使用trunk口类型连接特殊环境下有客户要求 pc 机需要用 trunk 口类型连接方法如下 1 创建 vlan2 H3C vlan2 H3C vlan2 q2 配置 trunk 接口模式 H3C intg1 0 1 H3C GigabitEther 0 1 portlink typetrunk H3C GigabitEther 0 1 porttrunkpvi 注意必须要用 pvid 而不能用 permit H3C GigabitEther

    2026年3月17日
    2
  • 为低端浏览器定义原型方法replaceAll

    为低端浏览器定义原型方法replaceAllString.prototype.replaceAll=function(regex,replacement){regex=regex.replace(‘!’,’\\!’).replace(‘@’,’\\@’).replace(‘#’,’\\#’).replace(‘$’,’\\$’)returnthis.replace(newRegExp(regex,’gm’),replacement);};

    2022年7月23日
    19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号