#ApiDemos#view之Animation

#Android源码#ApplicationInfo中flags的设计 介绍ApplicationInfo是android.content.pm包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量public int flags = 0;,用于保存应用的标志信息。设计ApplicationInfo实体类的设计很棒!用一个public int flags = 0;保存所有的标志信息,省了定义许多Boolean变量的代码。对一个int值(32位)1(二进制形 阅读详情

#ApiDemos#view之Animation

Animation1–Shake

代码风格

  1. 布局风格

    • 最外层使用padding–10dip
    • 第一个子控件使用marginBottom–10dip
    • 宽高使用wrap_content或match_content
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">  
    <EditText android:id="@+id/pw"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:singleLine="true"
        android:password="true"
    />
    <Button android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/googlelogin_login"
    />
    </LinearLayout>
  2. 代码风格

    • 实现接口,使用父类.接口形式,可以少导入一个包,当有多个不同父类的相同接口时不会乱
    • 当只需要对View进行点击事件时,没必要强转为子类
    • 控件命名采用“功能+控件名”
    public class Animation1 extends Activity implements View.OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.animation_1);
        View loginButton = findViewById(R.id.login);
        loginButton.setOnClickListener(this);
    }
    public void onClick(View v) {
        Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
        findViewById(R.id.pw).startAnimation(shake);
    }
    }

功能实现

  1. 使用平移动画

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromXDelta="0"
    android:interpolator="@anim/cycle_7"
    android:toXDelta="10" />
  2. 引用循环加速器(cycleInterpolator)

    <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:cycles="7" />
  3. 加载和开启动画

    Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
    findViewById(R.id.pw).startAnimation(shake);

Animation2–ViewFlipper翻转视图

代码风格

XML中
  1. 字符串命名采用“模块+功能”形式;
  2. 边距设置上,最外层使用内边距padding,子布局使用底部外边距marginBottom
Java代码中
  1. 成员变量使用“m”前缀

功能实现

布局中定义ViewFlipper
<ViewFlipper android:id="@+id/flipper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:flipInterval="2000"
            android:layout_marginBottom="20dip" >
            <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:textSize="26sp"
                    android:text="@string/animation_2_text_1"/>
            <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:textSize="26sp"
                    android:text="@string/animation_2_text_2"/>
</ViewFlipper>

注意:

  • ViewFlipper是ViewAnimator的子类,ViewAnimator是FrameLayout的子类,所以是ViewGroup,里面可以嵌套布局
  • flipInterval属性:设置两次动画的间隔
定义进出动画

push_left_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

push_left_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="300"
        android:fromYDelta="0"
        android:toYDelta="-100%p" />
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>
在代码中设置设置和启动动画
mFlipper.startFlipping();
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.push_left_in));
mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
        R.anim.push_left_out));

Animations3–Interpolator插值器

功能实现

final View target = findViewById(R.id.target);
final View targetParent = (View) target.getParent();

Animation a = new TranslateAnimation(0.0f,
        targetParent.getWidth() - target.getWidth() - targetParent.getPaddingLeft() -
        targetParent.getPaddingRight(), 0.0f, 0.0f);
a.setDuration(1000);
//设置动画延迟执行
a.setStartOffset(300);
a.setRepeatMode(Animation.RESTART);
a.setRepeatCount(Animation.INFINITE);
//设置插值器
a.setInterpolator(AnimationUtils.loadInterpolator(
this,
android.R.anim.accelerate_interpolator));
//开始动画
target.startAnimation(a);
//加速插值器
<accelerateInterpolator />
//减速插值器
<decelerateInterpolator />
//先加速后减速插值器
<accelerateDecelerateInterpolator />
//期望插值器:先后退再加速前进
<anticipateInterpolator />
//过冲插值器:先加速超过后反弹
<overshootInterpolator />
//期望过冲插值器:先后退再加速后反弹
<anticipateOvershootInterpolator />
//弹跳插值器:落体运动
<bounceInterpolator />

深入学习

简介

Interpolator,插值器,用于定义动画的速率。之所以可以改变动画的速率,在于按照某一规律(公式)平滑改变动画的执行时间,使得看起来动画有加速、减速或反弹等等效果

以下部分参考自:http://androidigging.blog.51cto.com/2753843/1427128

线性插值器
  • 类名: LinearInterpolator
  • 资源ID: @android:anim/linear_interpolator
  • XML标记: linearInterpolator
  • 公式: y=t

这里写图片描述

加速度插值器
  • 类名: AccelerateInterpolator
  • 资源ID: @android:anim/accelerate_interpolator
  • XML标记: accelerateInterpolator
  • 公式: y=t^(2f)
  • 注:f对应于xml中的android:factor属性,当f为0.5时为线性插值器
<?xml version="1.0" encoding="utf-8"?>
<accelerateInterpolator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:factor="2" />

这里写图片描述

减速插值器
  • 类名: DecelerateInterpolator
  • 资源ID: @android:anim/decelerate_interpolator
  • XML标记: decelerateInterpolator
  • 公式: y=1-(1-t)^(2f)
  • 注:f对应于xml中的android:factor属性

这里写图片描述

先加速后减速插值器
  • 类名: AccelerateDecelerateInterpolator
  • 资源ID: @android:anim/accelerate_decelerate_interpolator
  • XML标记: accelerateDecelerateInterpolator
  • 公式: y=cos((t+1)π)/2+0.5

这里写图片描述

AnticipateInterpolator
  • 类名: AnticipateInterpolator
  • 资源ID: @android:anim/anticipate_interpolator
  • XML标记: anticipateInterpolator
  • 公式: y=(T+1)×t^3-T×t^2
  • 注:T对应xml中的android:tension,是张力值

这里写图片描述

Overshoot Interpolator
  • 类名: OvershootInterpolator
  • 资源ID: @android:anim/overshoot_interpolator
  • XML标记: overshootInterpolator
  • 公式: y=(T+1)x(t1)^3+T×(t1)^2 +1
  • 注:T对应xml中的android:tension,是张力值

这里写图片描述

Anticipate Overshoot Interpolator
  • 类名: AnticipateOvershootInterpolator
  • 资源ID: @android:anim/anticipate_overshoot_interpolator
  • XML标记: anticipateOvershootInterpolator
  • 公式:这里写图片描述
  • 注:T对应xml中的android:tension,是张力值

这里写图片描述

弹跳插值器
  • 类名: BounceInterpolator
  • 资源ID: @android:anim/bounce_interpolator
  • XML标记: bounceInterpolator
  • 公式:这里写图片描述

这里写图片描述

周期插值器
  • 类名: CycleInterpolator
  • 资源ID: @android:anim/cycle_interpolator
  • XML标记: cycleInterpolator
  • 公式: y=sin(2π×C×t)
  • 注:C对应xml中的android:cycles参数,周期值

这里写图片描述

java结合Ai Spring AI 是 AI 工程的应用框架。其目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于AI领域,并促进使用POJO作为应用程序的构建块到AI领域。特征跨 AI 提供商的可移植 API 支持,适用于聊天、文本到图像和嵌入模型。支持同步 API 和流 API 选项。还支持下拉以访问特定于模型的功能。聊天模型亚马逊基岩人类学Cohere的命令AI21 Labs的侏罗纪-2Meta 的 LLama亚马逊的泰坦人类学克劳德Azure 开放式 AI。 阅读详情

相关推荐

Vanna 2.0:基于LLM的智能文本到SQL框架,实现企业级数据查询与权限控制

文本到SQL技术是自然语言处理与数据库交互的重要桥梁,它允许用户使用日常语言直接查询数据库,无需编写复杂的SQL语句。其核心原理是利用大语言模型理解用户意图,并结合检索增强生成技术,将自然语言问题转换为准确的结构化查询语言。这项技术的价值在于大幅降低了数据访问门槛,提升了业务人员的数据自助分析能力,并能在金融分析、销售报表、运营监控等场景中实现实时数据洞察。Vanna 2.0作为一个开源框架,通过引入用户感知的智能体架构和行级安全策略,解决了企业级应用中的多租户数据隔离与权限控制等关键问题,使得自然语言数据

weixin_42629522的博客 546

ListView及ListAdapter详解

ListView及ListAdapter详解一、AdapterView1. 简介An AdapterView is a view whose children are determined by an Adapter. 简单地说就是其子视图是由适配器决定的视图组件2. 子类 ListView GridView Spinner Gallery 3. 常用方法//功能:获取list中指定位置item g

技术路漫漫 1万+

从MC到DC:三维重建算法的核心原理与实战对比

本文深入对比了三维重建领域两大经典算法Marching Cubes(MC)与Dual Contouring(DC)的核心原理与实战表现。MC算法原理直观、实现简单,但存在特征丢失和二义性问题;DC算法通过求解二次误差函数(QEF)和利用法向量信息,能更好地保留模型的尖锐特征,但计算更复杂。文章结合医学影像处理实例,为开发者根据速度、精度和特征保真度需求选择合适算法提供了清晰指南。

weixin_29251131的博客 1036

Android中的Spinner的用法详解

Android中的Spinner的用法详解一、简介显示一个子布局让用户选择其中一项,这些项目是来自跟当前视图联系的适配器。具备两种视图模式,一种是下拉框形式(Dropdown),另一种是弹出对话框模式(Dialog)。二、XML属性 属性名 相关方法 描述 android:dropDownHorizontalOffset setDropDownHorizontalOffset(in

技术路漫漫 1万+

ETL基础概念及要求详解

ETL即Extract(抽取)Transform(转换)Load(装载)的过程,如下图,同时也包括数据清洗的部分,是数据从源端到目标端的一个数据处理的过程,是构建数据仓库的重要一环,但不局限于构建数据仓库其他BI(商业智能)的设计和开发数据分析平台也经常用到ETL。

qq_43605229的博客 8946

Unity程序化河流生成工具Waterways:从算法到实践的全流程解析

程序化内容生成(PCG)是游戏开发与三维建模领域的关键技术,它通过算法自动创建游戏内容,显著提升开发效率。其核心原理是将设计规则转化为可执行的代码逻辑,从而生成复杂、多样且符合自然规律的环境资产。在开放世界游戏和模拟经营类项目中,程序化生成技术能够快速构建大规模、高一致性的自然场景,如山川、森林与水体网络。Unity引擎作为广泛使用的开发平台,其地形系统与着色器管线为程序化工具的集成提供了强大基础。本文聚焦于利用Waterways这一Unity工具集,深入探讨如何通过模拟重力驱动、流量累积等自然水力原理,在

weixin_33690963的博客 684

内容提供者、内容解析者和内容观察者

内容提供者、内容解析者和内容观察者一、Linux文件权限 Linxu下的用户分u所有者 g所属组 o其他用户 Linux下文件权限r读 w写 x执行 文件权限表示文件类型(1位)+所有者权限(3位)+所属组权限(3位)+其他用户权限(3位),如图: 文件 权限 说明 d lrwxrwxrwx l表示是链接,链接到sys/kernel/debug,所有者、所属组和其他用户都有读写

技术路漫漫 5600

从‘包饺子’到‘包络线’:一个生活化比喻讲透长期与短期成本决策

本文通过饺子馆经营的生活化比喻,深入浅出地解析了长期与短期成本决策的核心逻辑。从调整人力(可变成本)到扩建厨房(固定成本),揭示了包络线理论在商业决策中的实际应用,帮助企业主在规模经济与成本控制间找到平衡点。

weixin_32006655的博客 342

Android项目中使用BeanUtils报异常

Android项目中使用BeanUtils的问题问题描述抛出异常说找不到这个类: java.beans.PropertyDescriptorE/AndroidRuntime(25679):java.lang.NoClassDefFoundError:java.beans.PropertyDescriptor[]问题探索1. 在Android SDK中找在Android SDK中试着找java.bea

技术路漫漫 3532

精密加工零件自动报价智能体设计与实现

摘要 本文设计并实现了一个精密加工零件自动报价智能体系统。该系统通过计算机视觉和几何分析技术,自动读取3D图纸(STEP/STL格式),提取影响加工成本的几何特征,实现精准报价。系统采用模块化设计,包含3D模型解析、特征提取、成本计算和报价生成四个核心模块。关键技术包括:使用PythonOCC处理STEP文件,Trimesh处理STL网格;实现体积、表面积、包围盒等基础几何量计算;开发特征提取算法识别复杂曲面、深孔等加工难点;基于规则库进行可加工性评分和成本估算。相比传统人工报价方式,该系统能显著提高报价效

AI的内部世界的博客 112

大数据开发工程师必备面试题与解答

大数据开发岗位一直是互联网行业的热门方向,面试过程中既考察基础知识,也关注实际项目经验和问题解决能力。本文整理了等核心组件相关的高频面试题及参考解答,帮助大家高效准备面试。大数据面试不仅考察基础理论,更看重项目经验与问题解决能力。本文涵盖了等核心知识点及调优思路,希望能帮助你在面试中游刃有余。

X2829352498的博客 304

JSON及其在项目中的使用

JSON一、简介 全称:JavaScript Ojbect Notation,JavaScript对象标记 功能:轻量级数据交换语言 语法严格 两种建立JS对象的方式//方式一:通过function function Person(xid,xname,xsal){ this.id=xid; this.name=name; this.sal=xsal; } var p = new person(1,"

技术路漫漫 2447

安卓手机老版本微信无法登录?无需root 一招教你如何搞定!旧版本照样登录,微信7.0亲测有效

微信我试了清缓存、用不同的版本、甚至关网登录都不行。于是我研究了一下背后的原理,发现这不仅是个技巧,还是微信设计的一点“疏忽”——**只要有方法,旧版本照样能用**。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

#Android源代码#android:onClick属性的底层调用

原理在View类的构造方法中发现这样的一个有趣的东西,可见。我们在布局中使用android:onClick="functionName",底层其实是设置好了监听器了,然后利用反射调用我们在代码中写的方法,如://在Activity中写的代码 public void functionName(View v){ //doSomthing }//View中反射调用 Method mHandler

技术路漫漫 2233

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android项目打包、Eclipse视图和UI控件

Android项目打包、Eclipse视图和UI控件一、项目打包过程1. 过程 编译打包成apk文件 使用adb安装到设备上 2. adb 简介android debug bridge(Android调试桥) 作用连接开发工具和Android设备 安装apk到Android设备上 命令 命令 作用 adb devices 列出所有连接的Android设备 adb -s device

技术路漫漫 1775

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

#Android源码#View的构造方法为什么要4个?

问题描述在View中发现有四个构造方法(5.0下是三个),如下,有什么玄妙吗?//C1 public View(Context context) { .... } //C2 public View(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } //C3 public View(C

技术路漫漫 1555

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android中的单任务模式

程序跳转后再次启动会在设备上产生多个activity实例。为释放内存,系统会杀死多余的activity实例,可能会导致异常。为避免上述情况发生,可以在Menifest中控制每个activity的这种行为。限制在任务重的任何时刻,只有一个activity只有一个实例在运行,android:launchMode="singleInstance"进一步限制所有activity只有一个实例在运行androi

技术路漫漫 1418

#Android源码#自定义UI控件

自定义UI控件系统是如何定义UI控件的?1. 首先我们在布局文件中定义了一个布局我们自定义的布局(其中声明了命名空间为xmlns后面的内容)<View xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/view" android:visibility="visible"

技术路漫漫 1385

Android中的文件上传下载

Android中的文件上传下载一、文件上传1. 使用HttpUrlConnection//此处省略线程操作和Handler通信 File file = new File(etUpload.getText().toString()); FileInputStream in = new FileInputStream(file); URL url = new URL(path); // 开启连接 Htt

技术路漫漫 1327

Android中的数据存储之文件存储、SharedPreferences和Pull解析

Android中的数据存储之文件存储、SharedPreferences和Pull解析一、数据存储的五种方式 文件存储 分手机内部存储、手机外部存储 以IO流形式存放,可存放较大数据 SharedPreferences 本质是一个XML 以Map形式存放简单的配置参数 SQLite 轻量级、跨平台数据库 所有数据都是存放在手机上的单一文件内,占用内存小 ContentProvider 将本应

技术路漫漫 1262

#Android源码#Android Touch事件分发机制思考

——– 写在前面 ————————————————用一天来思考Touch事件的分发,值了!参考了一些知名的博客,由于并没有引用其中的原文就不具体写引用了。Google一下就有了。以下是我的看法,有错漏的欢迎指正。转载请注明出处:Lshare版权所有概述Android中的事件分发是遵循类似责任链模式的,就是从根节点开始逐层往里分发事件,直到找到责任人(即响应事件的View)或找不到责任人事件“丢弃”为

技术路漫漫 1187

初识Android

Android概述一、手机制式的发展所谓的4G中的G指的是Generation,即移动通信技术世代。 1G 语音通话,模拟信号,无线电 2G (GSM\GPRS\EDGE)增加接收数据的功能,接收邮件和网页(wap),java程序(J2ME) 3G 无线通信技术结合互联网等多媒体通信 4G 集高速无线网络和有线网络WLAN一体的通讯网络 二、IT业的三大热点 云计算通过Int

技术路漫漫 1150

Android Visualizer 实战:把声音画出来

是系统提供的音频效果(AudioEffect)之一。它挂在音频链路上,,把数据回吐给你——画波形、画频谱、做响度表。

Android的专栏 297

Android 开发入门实践(十三):用 Intent、UiState 和 Reducer 理解 MVI 的状态更新

本文记录第141—145课对MVI架构的入门实践,通过“返回列表”功能逐步构建意图(NewsIntent)、状态(NewsUiState)与状态转换(reduce)机制。基于单向数据流,用户操作生成意图,ViewModel通过Reducer根据旧状态计算新状态,并通过StateFlow更新Compose界面。代码实现清晰分离关注点,强化了对状态管理、事件驱动与数据流的理解。

Easyhood的博客 332

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 202

RK-RK3572-Android16- 编译打包优化-OTA整包-差分包打包

这里主要记录一下 RK3572 在Android16 上面进行OTA升级的整包和差分包制作经验的一个分享,整理知识点,方便后续自己和其它同事开发提高工作效率、直接使用。不管哪一个平台,MTK 也好、RK也好 基本上都是不同Android版本各个子系统之间还是有一点点区别的,所以有必要记录整理知识点,方便提高开发效率、生产效率。针对OTA升级问题 ,再一次说明还是要看官方提供的文档,按照文档来。

十年饮冰,难凉热血 159
上一篇: 【20】MySQL数据库
下一篇: #Android源码#自定义UI控件
Lshare
博客等级 码龄12年 36粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值