码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android viewPager2实现画廊效果


    直接上代码

    public class ScaleAlphaPageTransformer implements ViewPager2.PageTransformer {
    
        public static final float MAX_SCALE = 1.0f;
        public static final float MIN_SCALE = 0.8f;
        public static final float MAX_ALPHA = 1.0f;
        public static final float MIN_ALPHA = 0.7f;
    
        private boolean alpha = true;
        private boolean scale = true;
    
        @Override
        public void transformPage(View page, float position) {
    
            //翻转效果
            float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
            float rotate = 20 * Math.abs(position);
            float transla = 20 * Math.abs(position);
            if (position > 0) {
                page.setScaleX(scaleFactor);
                page.setScaleY(scaleFactor);
                page.setRotationY(-rotate);
                page.setTranslationX(-transla);
            } else {
                page.setScaleX(scaleFactor);
                page.setScaleY(scaleFactor);
                page.setRotationY(rotate);
                page.setTranslationX(transla);
            }
    
            //无效果
    //        if (position < -1) {
    //            position = -1;
    //        } else if (position > 1) {
    //            position = 1;
    //        }
    
            float tempScale = position < 0 ? 1 + position : 1 - position;
            if (scale) {
                float slope = (MAX_SCALE - MIN_SCALE) / 1;
                //一个公式
                float scaleValue = MIN_SCALE + tempScale * slope;
                page.setScaleX(scaleValue);
                page.setScaleY(scaleValue);
            }
            if (alpha) {
                //模糊
                float alope = (MAX_ALPHA - MIN_ALPHA) / 1;
                float alphaValue = MIN_ALPHA + tempScale * alope;
                page.setAlpha(alphaValue);
            }
        }
    
        /***
         * 设置是否模糊和改变大小
         * @param alpha
         * @param scale
         */
        public void setType(boolean alpha, boolean scale) {
            this.alpha = alpha;
            this.scale = scale;
        }
    
    }
    public class RecAdapter extends RecyclerView.Adapter {
    
        protected LayoutInflater inflater;
        protected Context context;
        protected List dataList;
    
        public RecAdapter(Context context, List dataList) {
            this.context = context;
            this.dataList = dataList;
            inflater = LayoutInflater.from(context);
        }
    
        @NonNull
        @Override
        public RecAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            if (viewType == 0){
                return new ViewHolder(inflater.inflate(R.layout.item_home_tab, parent, false));
            }
            return null;
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecAdapter.ViewHolder holder, int position) {
            switch (getItemViewType(position)) {
                case 0:
    
                    break;
            }
        }
    
        @Override
        public int getItemCount() {
            return dataList.size();
        }
    
        class ViewHolder extends RecyclerView.ViewHolder {
    
            public ViewHolder(View itemView) {
                super(itemView);
    
            }
        }
    
    }

    布局就就是一个viewPager2

    
    
        
    
    

    要加上   android:clipChildren="false"    ,然后使用就简单了

    page2 = findViewById(R.id.page2);
    ScaleAlphaPageTransformer former = new ScaleAlphaPageTransformer();
    former.setType(true,true);
    page2.setOffscreenPageLimit(3);  //设置页面缓存数量
    page2.setPageTransformer(former);
    page2.setCurrentItem(1);
    recAdapter = new RecAdapter(this, dataList);
    page2.setAdapter(recAdapter);

    当然还要加上父布局的事件,能够让边缘的view也能滑动

    lin = findViewById(R.id.lin);
    lin.setOnTouchListener((v, event) -> {
        ///
        return page.dispatchTouchEvent(event);
    });

    一个简单的画廊效果就实现了

  • 相关阅读:
    星淘惠告诉你跨境平台那么多,凭什么要选亚马逊?
    华为Mate 60难以撼动苹果的市场份额
    Spring Security实现基于RBAC的权限表达式动态访问控制
    新增公司管理页 分页设置 新增功能 删除功能
    bRPC works with iRDMA && ICE on Fedora 37
    C++ 二叉树非递归先/后序 + 实战力扣题
    三网话费余额查询的API系统 基于thinkphp6.0框架
    交叉编译详解
    一对一直播软件——如何实现音视频传播?
    hadoop、hive、DBeaver的环境搭建及使用
  • 原文地址:https://blog.csdn.net/lw1389074/article/details/126518875
    • 最新文章
    • 沪漂五周年了:我越来越迷茫了
      Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
      MySQL-Seconds_behind_master的精度误差
      [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
      AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
      Agent OS :五种驯服不确定性的范式
      PortSwigger SQL注入LAB11
      数据库即时编译JIT
      [Begin]AI Learn Data Day 0
      深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    小工具 小游戏
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

    京公网安备 11010502049817号