推荐一个比较好用的画廊展示图片(支持无限轮播)的控件ViewPagerGallery「建议收藏」

推荐一个比较好用的画廊展示图片(支持无限轮播)的控件ViewPagerGallery「建议收藏」1.在此我们引用支持无限滑动的3D视觉的画廊效果、平面普通广告栏轮播这个例子中有可以运行的效果,大家可以下载下来先看一下,在我开始使用的时候,发现,想要调整pageitem中的间距,比较困难,并没有暴露方法出来。所以就要看一下源代码,发现,在不使用3D效果,即初始化:initBanner(urlList,false),没有什么问题,(这里说的3D效果,就是左右item要比正在显示的ite…

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

1.在此我们引用 支持无限滑动的3D视觉的画廊效果、 平面普通广告栏轮播

这个例子中有可以运行的效果,大家可以下载下来先看一下,在我开始使用的时候,发现,想要调整 page item中的间距,比较困难,并没有暴露方法出来。所以就要看一下源代码,发现,在不使用3D效果,即初始化:initBanner(urlList,false),没有什么问题,(这里说的3D效果,就是左右item要比正在显示的item的高度小一些,并且添加动画的效果)

banner_3d.initBanner(urlList, true)//开启3D画廊效果
                .addPageMargin(5, 15)//参数1page之间的间距,参数2中间item距离边界的间距
                .addPoint(6)//添加指示器
                .addPointBottom(7)
                .addStartTimer(5)//自动轮播5秒间隔
                .addRoundCorners(12)//圆角
                .finishConfig()//这句必须加
                .addBannerListener(new BannerViewPager.OnClickBannerListener() {
                    @Override
                    public void onBannerClick(int position) {
                        //点击item
                        showShort("效果1点击"+position);
                        Log.i("test","--------------00x1");
                    }
                });

2.发现开启3D效果时,addPageMargin会失效,item左右的间距设置没有任何改变,页面非常丑陋,左右间距相差太大,罪魁祸首是 ZoomPageTransformer这个类

然后我们可以通过修改 setScaleX,setScaleY来分别改变page item间距以及 左右item的高度问题,以下我修改了原来的view.setScaleX(MIN_SCALE);为 view.setScaleY(X_SCALE);

package com.lzj.gallery.library.transformer;

import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;

/**
 * Created by Administrator on 2018/11/28.
 * 3D画廊效果其实就是ViewPager的item切换时,进行缩放的动画效果
 *
 */

public class ZoomPageTransformer implements ViewPager.PageTransformer {

    private static final float MAX_SCALE = 1.0f;//0缩放

//    private static final float MIN_SCALE = 0.85f;//0.85缩放
    private static final float MIN_SCALE = 0.89f;//0.85缩放
    private static final float X_SCALE = 0.99f;

    private float MIN_ALPHA = 1.0f;//最小透明度

    public ZoomPageTransformer() {
    }
    public ZoomPageTransformer(float MIN_ALPHA) {
        this.MIN_ALPHA = MIN_ALPHA;
    }
    @Override
    public void transformPage(View view, float position) {
        //setScaleY只支持api11以上
        /**
         * (-oo,-1) 相对于左边第一页,其左边的所有页面 **
         * x、y拉伸为MIN_SCALE、透明度MIN_ALPHA
         */
        if (position < -1) {
            Log.d("MyInfo","11111");
//            view.setScaleX(MIN_SCALE);
            view.setScaleX(X_SCALE);
            view.setScaleY(MIN_SCALE);
            view.setAlpha(MIN_ALPHA);
        }
        /**
         * [-1, 1 )当前页的左右第一页
         */
        else if (position < 1) {
            Log.d("MyInfo","2222");
            float scaleFactor = MIN_SCALE + (1 - Math.abs(position)) * (MAX_SCALE - MIN_SCALE);
            //[0, 1 ) 相对于当前选中页,其右边第一页 **
            if (position > 0) {
                Log.d("MyInfo","3333");
                view.setTranslationX(-scaleFactor);
            }
            // [-1, 0 ) 相对于当前选中页,其左边的第一页**
            else if (position < 0) {
                Log.d("MyInfo","4444");
                view.setTranslationX(scaleFactor);
            }
            view.setScaleY(scaleFactor);
//            view.setScaleX(scaleFactor);
            view.setScaleX(X_SCALE);

            // float alpha = 1f -  Math.abs(position) * (1 - );

            float alpha = MIN_ALPHA + (1 - MIN_ALPHA) * (1 - Math.abs(position));
            view.setAlpha(alpha);

        }
        /**
         * [1,+oo) 相对于右边第一页,其右边的所有页面
         * x、y拉伸为MIN_SCALE、透明度MIN_ALPHA
         */
        else { // (1,+Infinity]
            Log.d("MyInfo","5555");
//            view.setScaleX(MIN_SCALE);
            view.setScaleX(X_SCALE);
            view.setScaleY(MIN_SCALE);
            view.setAlpha(MIN_ALPHA);
        }
    }

}

3.重要方法

  • view.setScaleX(X_SCALE);
  • view.setScaleY(MIN_SCALE);

4.如何使用

4.1xml中声明:

<com.lzj.gallery.library.views.BannerViewPager
        android:id="@+id/banner_3d"
        android:layout_marginTop="20dp"
        android:clipChildren="false"
        android:layout_width="match_parent"
        android:layout_height="150dp">

    </com.lzj.gallery.library.views.BannerViewPager>
  

4.2 activity中调用

banner_3d.initBanner(urlList, true)//开启3D画廊效果
                .addPageMargin(5, 15)//参数1page之间的间距,参数2中间item距离边界的间距
                .addPoint(6)//添加指示器
                .addPointBottom(7)
                .addStartTimer(5)//自动轮播5秒间隔
                .addRoundCorners(12)//圆角
                .finishConfig()//这句必须加
                .addBannerListener(new BannerViewPager.OnClickBannerListener() {
                    @Override
                    public void onBannerClick(int position) {
                        //点击item
                        showShort("效果1点击"+position);
                        Log.i("test","--------------00x1");
                    }
                });

4.3 优化处理(页面中控制 banner轮播开始与暂停)

@Override
    public void onStart() {
        super.onStart();
        if(mBanner!=null){
            mBanner.startTimer();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        if(mBanner!=null){
            mBanner.stopTimer();
        }
    }

注意:(如果在RecyclerView中使用的时候,要先进行 mBanner.removeAllView(),否则会有图案粘贴在背后的一个bug)

由于上面贴出的那个类还在类库文件中,可以将源代码下载下来并且将 gallery类库直接导进来,修改ZoomPageTransformer即可。下面贴一张改后的效果图(第一个显示为改后的效果):
在这里插入图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gimp中文版教程_GIMP中详细教程.pdf「建议收藏」

    gimp中文版教程_GIMP中详细教程.pdf「建议收藏」GIMP中详细教程GIMP实用系列教程1文件的打开和存储概述打开GIMP软件其初始界面如下:左边是工具,工具箱中每选择一种工具后,通常在其下部会出现一个与其相配的选项栏一起使用的。因此每选好一种工具,首先要把选项栏中的有关选项根据需要选定以后才开始使用。例如:图中选择了画笔,则画笔的选项栏可以选择其不透明度、画笔的笔尖形状、画笔的大小等选项。右边通常可以放置一个图层对话框,如未出现可以在下拉…

    2022年4月19日
    96
  • 费曼学习法

    费曼学习法费曼学习法我的理解:费曼学习法就是把学好的东西用简洁易懂的语言,传授给别人举例:你学完微积分,然后自己去培训班,自己做老师,传授给学生们,并且学生们都能听懂费曼学习法的四个步骤:1.确定目标

    2022年7月28日
    6
  • c语言定义函数和声明函数_C语言中用户定义函数的类型

    c语言定义函数和声明函数_C语言中用户定义函数的类型c语言定义函数和声明函数C语言中用户定义函数的类型(TypeofUser-definedFunctionsinC)Therecanbe4differenttypesofuser-definedfunctions,theyare:可以有4种不同类型的用户定义函数,它们是:Functionwithnoargumentsandnoreturnv…

    2022年6月22日
    29
  • int使用规则_single是什么数据类型

    int使用规则_single是什么数据类型先说结论吧,方便快速查询验证。总结区别int类型大小为8字节int8类型大小为1字节int16类型大小为2字节int32类型大小为4字节int64类型大小为8字节go语言中的int的大小是和操作系统位数相关的,如果是32位操作系统,int类型的大小就是4字节;如果是64位操作系统,int类型的大小就是8个字节取值范围int8:-128~127int16:-32768~32767int32:-2147483648~214

    2026年1月29日
    4
  • USB计算机连接只能充电,手机连接不上电脑只显示充电怎么办[通俗易懂]

    USB计算机连接只能充电,手机连接不上电脑只显示充电怎么办[通俗易懂]有的时候,需要把电脑上的资料传到手机上或者把手机上的一些照片传到电脑上面,但是有时候想要传照片的时候会发现手机与电脑连接在一起的时候只显示出在充电,但是与电脑没有连接在一起,相信很多朋友们都会遇到这样的问题,首先要排除的是手机的数据线没有任何的问题,如果说手机的数据线没有问题的的话那就一定是驱动的问题而引发的,那么今天小编就教大家如果手机为什么连接不上电脑应该怎么办。第一步:如果已经确定了不是数据…

    2022年8月12日
    5
  • python读写json_python格式化json

    python读写json_python格式化jsonJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。JSON在python中分别由list和dict组成。这是用于序列化的两个模块:json:用于字符串和p

    2022年8月31日
    5

发表回复

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

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