当前位置: 首页 > news >正文

《Android-RecyclerView实现封面滑动到指定位置放大》---ViewPager封面指示器

一、实现效果

请添加图片描述

二、关键代码

1、自定义:LinearLayoutManager

指定位置放大item


import android.content.Context;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class ScaleLayoutManager extends LinearLayoutManager {
   

    private static final float MAX_SCALE = 1.45f; // 最大放大比例
    private static final float MIN_SCALE = 1.0f; // 最小缩放比例
    private static  int MAX_LEFT_DISTANCE = 300; // 距离左边x px 时放大到最大

    private int mWidth;
    private int mHeight;

    public ScaleLayoutManager(Context context) {
   
        super(context, LinearLayoutManager.HORIZONTAL, false);

        // 转换dp到像素
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        MAX_LEFT_DISTANCE = (int) (78 * metrics.density);     // 100dp
        mWidth = (int) (65 * metrics.density);         // 16dp
        mHeight = (int) (74 * metrics.density);  // 200dp
    }

    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
   
        super.onLayoutChildren(recycler, state);
        scaleChildViews();
    }

    @Override
    public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
   
        int scrolled = super.scrollHorizontallyBy(dx, recycler, state);
        scaleChildViews();
        return scrolled;
    }

    private void scaleChildViews() {
   

        for (int i = 0; i < getChildCount(); i++) {
   
            View child = getChildAt(i);
            if (child == null) continue;

            float childCenterX = (child.getLeft() + child.getRight()) / 2f;
            float distance = Math.abs(MAX_LEFT_DISTANCE - childCenterX);

            // 计算缩放比例
   

相关文章:

  • 从同步到异步:Vue 3 的异步更新策略与 `tick` 机制
  • 应对现代生活的健康养生指南
  • 【算法】798. 差分矩阵
  • MS SQL 2008 技术内幕:T-SQL 语言基础
  • 使用OpenCV实现帧间变化检测:基于轮廓的动态区域标注
  • 【vue2-el-upload上传文件】
  • Java应用程序的跨平台性能优化研究
  • [Web 信息收集] Web 信息收集 — 手动收集域名信息
  • SQL注入练习
  • 组件的组成和组件的嵌套关系
  • java使用word模板填充内容,再生成pdf
  • autojs例子之webView的UA切换
  • Java中的日志框架:Log4j2 vs SLF4J vs Logback
  • 【力扣】2621. 睡眠函数——认识Promise
  • JAVA若依框架
  • 在 Vue 3 中,如何缓存和复用动态组件
  • 微服务2025/2/15
  • 前缀和算法:解锁高效编程的钥匙
  • Leetcode---83.删除排序链表中的重复元素
  • 谷歌GMS认证,安卓14版本的谷歌EDLA认证详细介绍,谷歌安卓14 EDLA认证有多少测试项?
  • 弹窗网站制作器/洛阳网站建设
  • 企业文化宣传册模板/盛大游戏优化大师
  • 建站吧网站建设/推广app佣金平台正规
  • 哪些网站可以做易拉宝/免费制作网站平台
  • 阳江招聘网的拼音/seo推广软件
  • 开发多语言网站/成都seo优化