mtk桌面壁纸滚动

news2024/9/24 5:22:26

路径:packages\apps\Launcher3\src\com\android\launcher3

目前代码中是未打开的状态
1

packages\apps\Launcher3\src\com\android\launcher3\util\WallpaperOffsetInterpolator.java
涉及到的方法有:(重要性从上往下)

  • updateOffset()——最重要

    • computeScrollOffset()——在updateOffset()中被调用
  • doFrame()——调用updateOffset()

  • syncWithScroll()——调用updateOffset()

    • wallpaperOffsetForCurrentScroll()——调用wallpaperOffsetForScroll
      • wallpaperOffsetForScroll——计算屏幕滚动时壁纸的偏移量
    • setFinalX()——壁纸当前滑动的目标值
      • animateToFinal()——打开boolean mAnimating属性
  • computeScroll()——在别的类中,initWorkspace里创建了WallpaperOffsetInterpolator的对象,并在computeScroll方法调用了syncWithScroll方法

涉及到的常量有:

  • MIN_PARALLAX_PAGE_SPAN——壁纸滑动至显示完整时的滚动次数,即屏幕的数量减一
private void updateOffset(boolean force) {
    if (mWaitingForUpdate || force) {
        mWaitingForUpdate = false;
        if (computeScrollOffset() && mWindowToken != null) {
            try {
                mWallpaperManager.setWallpaperOffsets(mWindowToken, getCurrX(), 0.5f);
                setWallpaperOffsetSteps();
            } catch (IllegalArgumentException e) {
                Log.e(TAG, "Error updating wallpaper offset: " + e);
            }
        }
    }
}
public boolean computeScrollOffset() {
    final float oldOffset = mCurrentOffset;
    if (mAnimating) {
        long durationSinceAnimation = System.currentTimeMillis() - mAnimationStartTime;
        float t0 = durationSinceAnimation / (float) ANIMATION_DURATION;
        float t1 = mInterpolator.getInterpolation(t0);
        mCurrentOffset = mAnimationStartOffset +
                (mFinalOffset - mAnimationStartOffset) * t1;
        mAnimating = durationSinceAnimation < ANIMATION_DURATION;
    } else {
        mCurrentOffset = mFinalOffset;
    }

    if (Math.abs(mCurrentOffset - mFinalOffset) > 0.0000001f) {
        scheduleUpdate();
    }
    if (Math.abs(oldOffset - mCurrentOffset) > 0.0000001f) {
        return true;
    }
    return false;
}
@Override
public void doFrame(long frameTimeNanos) {
    updateOffset(false);
}
public void syncWithScroll() {
    float offset = wallpaperOffsetForCurrentScroll();
    setFinalX(offset);
    updateOffset(true);
}
private float wallpaperOffsetForCurrentScroll() {
  return wallpaperOffsetForScroll(mWorkspace.getScrollX());
}
public float wallpaperOffsetForScroll(int scroll) {
  // To match the default wallpaper behavior in the system, we default to either the left
    // or right edge on initialization
    int numScrollingPages = getNumScreensExcludingEmptyAndCustom();
    if (mLockedToDefaultPage || numScrollingPages <= 1) {
        return mIsRtl ? 1f : 0f;
    }

    // Distribute the wallpaper parallax over a minimum of MIN_PARALLAX_PAGE_SPAN workspace
    // screens, not including the custom screen, and empty screens (if > MIN_PARALLAX_PAGE_SPAN)
    if (mWallpaperIsLiveWallpaper) {
        mNumPagesForWallpaperParallax = numScrollingPages;
    } else {
        mNumPagesForWallpaperParallax = Math.max(MIN_PARALLAX_PAGE_SPAN, numScrollingPages);
    }
    // Offset by the custom screen
    int leftPageIndex;
    int rightPageIndex;
    if (mIsRtl) {
        rightPageIndex = mWorkspace.numCustomPages();
        leftPageIndex = rightPageIndex + numScrollingPages - 1;
    } else {
        leftPageIndex = mWorkspace.numCustomPages();
        rightPageIndex = leftPageIndex + numScrollingPages - 1;
    }

    // Calculate the scroll range
    int leftPageScrollX = mWorkspace.getScrollForPage(leftPageIndex);
    int rightPageScrollX = mWorkspace.getScrollForPage(rightPageIndex);
    int scrollRange = rightPageScrollX - leftPageScrollX;
    if (scrollRange == 0) {
        return 0f;
    }
    // Sometimes the left parameter of the pages is animated during a layout transition;
    // this parameter offsets it to keep the wallpaper from animating as well
    int adjustedScroll = scroll - leftPageScrollX -
            mWorkspace.getLayoutTransitionOffsetForPage(0);
    float offset = Utilities.boundToRange((float) adjustedScroll / scrollRange, 0f, 1f);

    // The offset is now distributed 0..1 between the left and right pages that we care about,
    // so we just map that between the pages that we are using for parallax
    float rtlOffset = 0;
    if (mIsRtl) {
        // In RTL, the pages are right aligned, so adjust the offset from the end
        rtlOffset = (float) ((mNumPagesForWallpaperParallax - 1) - (numScrollingPages - 1)) /
                (mNumPagesForWallpaperParallax - 1);
    }
    return rtlOffset + offset *
            ((float) (numScrollingPages - 1) / (mNumPagesForWallpaperParallax - 1));
}
public void setFinalX(float x) {
    scheduleUpdate();
    mFinalOffset = Math.max(0f, Math.min(x, 1f));
    if (getNumScreensExcludingEmptyAndCustom() != mNumScreens) {
        if (mNumScreens > 0 && Float.compare(mCurrentOffset, mFinalOffset) != 0) {
            // Don't animate if we're going from 0 screens, or if the final offset is the same
            // as the current offset
            animateToFinal();
        }
        mNumScreens = getNumScreensExcludingEmptyAndCustom();
    }
}
private void animateToFinal() {
    mAnimating = true;
    mAnimationStartOffset = mCurrentOffset;
    mAnimationStartTime = System.currentTimeMillis();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构的分类

目录 一、 RUP41 架构 1.1 RUP41架构方法概述 1.2 RUP41架构总体 1.3 RUP41架构方法内容 1.3.1 逻辑视图 1.3.2 开发视图 1.3.3 物理视图 1.3.4 处理视图 1.3.5 场景视图 ​二、 TOGAF9 架构 2.1 TOGAF9 架构概述 2.2 TOGAF9 架构分类 2.2.1 业务架构 2.2.2 数据架…

Vue2 第四节 计算属性,监视属性

1.计算属性 2.监视属性 3.计算属性与监视属性之间的关系 一.计算属性 定义&#xff1a;要用的属性不存在&#xff0c;要通过已有属性计算得来原理&#xff1a;底层借助了Object.defineproperty方法提供的getter和setterget函数什么时候会执行&#xff1a;初次读取的时候会执…

银河麒麟安装solr及配置文件修改

下载并解压 将从官网下载的solr.tar.gz解压到目标文件夹 解压命令&#xff1a;tar -zxvf solr-xxx.tar.gz 修改配置文件 进入目录&#xff1a; /home/solr/solr-8.5.1/bin/init.d 修改solr文件里面部分配置 修改solr服务路径 SOLR_INSTALL_DIR"/opt/solr" 改为…

app稳定性测试-iOS篇

稳定性测试&#xff1a;测试应用程序在长时间运行过程中是否存在内存泄漏、崩溃等问题&#xff0c;以确保应用程序具有较高的稳定性和可靠性。 对于安卓端&#xff0c;官方提供了很好的稳定性测试工具&#xff1a;monkey。 相比较而言&#xff0c;iOS则没有&#xff0c;而且当前…

#systemverilog# 说说Systemverilog中《automatic》那些事儿(关于for循环内置变量研究)

#systemverilog# 说说Systemverilog中《static》那些事儿(理论篇1) 上面的截图,是来自于前面的文章,当时留下的疑问,今天和大家是实践一下小细节问题。 一 for 内置声明变量修饰 1.1 static 修饰

第八章浮点单元(Cortex-M7 Processor)

目录 浮点单元 8.1关于FPU 8.2FPU功能描述 8.2.1操作方式 8.2.2符合IEEE 754标准 8.2.3异常 8.3FPU编程器模型 浮点单元 介绍FPU (Floating Point Unit)。 它包含以下部分: 关于FPU的信息见8-2。FPU功能描述见8-3。FPU程序员模型在第8-5页。 8.1关于FPU Cortex-M7处…

基于RK3588+FPGA+AI算法定制的智慧交通与智能安防解决方案

随着物联网、大数据、人工智能等技术的快速发展&#xff0c;边缘计算已成为当前信息技术领域的一个热门话题。在物联网领域&#xff0c;边缘计算被广泛应用于智慧交通、智能安防、工业等多个领域。因此&#xff0c;基于边缘计算技术的工业主板设计方案也受到越来越多人的关注。…

【Kaggle】Kaggle数据集如何使用命令语句下载?

一、Kaggle数据集如何下载 1.1 问题的起因 最近看到了 Google 组织的 Kaggle 比赛&#xff0c;想自己试一下&#xff0c;但是数据集太大了&#xff0c;将近有370G的数据。直接下载的话&#xff0c;网速太慢&#xff0c;可能要下载3-4天&#xff0c;所以萌生了用命令语句下载的…

LeetCode刷题笔记-287题寻找重复数

LeetCode 287 寻找重复数 难度&#xff1a;中等 题目&#xff1a; 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回…

fpga开发--蜂鸣器发出连续不同的音调

描述 使用fpga蜂鸣器连续发出do&#xff0c;re&#xff0c;mi&#xff0c;fa&#xff0c;so&#xff0c;la&#xff0c;xi七个不同的音调&#xff0c;每个音调的持续时间为0.5s。 思路 采用状态机实现音调的转化&#xff0c;当do状态持续了0.5s之后转移到re状态&#xff0c;…

c语言位段知识详解

本篇文章带来位段相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&#xff01; 目录 一.什么是…

【SpringCloud Alibaba】(五)服务雪崩与容错方案

在前面的文章中&#xff0c;我们实现了用户微服务、商品微服务和订单微服务之间的远程调用&#xff0c;并且实现了服务调用的负载均衡。 但是&#xff0c;现在系统中存在着一个很明显的问题&#xff1a;那就是如果系统的并发量上来后&#xff0c;系统并没有容错的能力&#xf…

Onetable:统一的表格式元数据表示

概括 Onehouse 客户现在可以将他们的 Hudi 表查询为 Apache Iceberg 和/或 Delta Lake 表&#xff0c;享受从云上查询引擎到顶级开源项目的原生性能优化。 在数据平台需求层次结构的基础上&#xff0c;存在摄取、存储、管理和转换数据的基本需求。 Onehouse 提供这种基础数据…

C++库封装JNI接口——实现java调用c++

1. JNI原理概述 通常为了更加灵活高效地实现计算逻辑&#xff0c;我们一般使用C/C实现&#xff0c;编译为动态库&#xff0c;并为其设置C接口和C接口。用C实现的一个库其实是一个或多个类的简单编译链接产物。然后暴露其实现类构造方法和纯虚接口类。这样就可以通过多态调用到…

获取各省人口排名数据

目录 一、目标网址 二、网址分析 2.1、获取并解析网页内容 2.2 两种获取方法 三、获取目标数据 四、代码附件 一、目标网址 目标网址&#xff1a;中国人口排名 省份 1.1 网址截图 二、网址分析 2.1、获取并解析网页内容 我们需要使用requests库获取网页&#xff0c;使用…

三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询

目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类 controller层 service层及实现类 dao层 测试&#xff1a; 2.链表分页条件查询 会员等级实体类 封装条件类PageVo controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 1.根据用户名…

多模态大模型(MLLM)之VisCPM:支持中文对话文图双向生成

2020 年 12 月发布的 CPM-1 是国内首个中文大模型 &#xff1b;2022 年 9 月发布的 CPM-Ant 仅微调 0.06% 参数就能超越全参数微调效果&#xff1b;2023 年 5 月发布的 WebCPM 是 中文首个基于搜索的问答开源模型。CPM-Bee 百亿大模型是团队最新发布的基座模型&#xff0c;中文…

基于springboot+mybatis+vue进销存管理信息系统

基于springbootmybatisvue进销存管理信息系统 一、系统介绍二、功能展示1.个人中心2.企业信息管理3.商品信息管理4.客户信息管理5.入库记录管理6.出库记录管理7.出库记录管理8.操作日志管理9.库存盘点管理 四、获取源码 一、系统介绍 系统主要功能&#xff1a; 普通用户&#…

为啥运营商现在严格规范网购流量卡的年龄了呢?20岁以下难了

本期知识点只讲流量卡&#xff0c;葫芦弟今天分享给大家手机流量卡开卡安全的问题。 很多朋友可能觉得电信诈骗离自己很远&#xff0c;但实际上现在已经出现大量收购电话卡用于诈骗的现象&#xff0c;而我们很可能在不知不觉中掉进犯罪分子的陷阱&#xff0c;触犯法律&#xff…

关于element ui 安装失败的问题解决方法、查看是否安装成功及如何引入

Vue2引入 执行npm i element-ui -S报错 原因&#xff1a;npm版本太高 报错信息&#xff1a; 解决办法&#xff1a; 使用命令&#xff1a; npm install --legacy-peer-deps element-ui --save 引入&#xff1a; 在main.js文件中引入 //引入Vue import Vue from vue; //引入…