Android属性动画应用——菜单以散开的方式弹出

Unity资源逆向提取实战:AssetStudio核心机制与疑难解析 在游戏开发与资源管理中,资源序列化与反序列化是核心技术环节,它决定了资源在引擎中的存储、加载与使用效率。Unity引擎通过将原始美术、音频等资源序列化为专有的二进制格式(如.assets、AssetBundle),以实现运行时优化与知识产权保护。理解这一原理,对于进行资源回收、技术分析乃至游戏Mod制作具有重要价值。AssetStudio作为一款开源逆向工具,正是基于对Unity资源格式的深度解析,实现了从打包文件中提取纹理、网格、动画等资源并转换为PNG、FBX、WAV等通用格式的能力。其核心工作流程涉及 阅读详情

一、前言
Google推出的新方法——android属性动画,让很多大牛和热爱技术的人高兴不已,纷纷发表自己的学习心得、认识以及教程。这里,我是通过在慕课网的相关视频学习中,获得的启发,于是整理了一下,希望与大家分享。
OK,废话不多说,赶快进入主题。
下面先展示一下界面效果:
![点击橘红色的按个按钮之后,会弹出五个小按钮,形成一直角三角形。如果想让它展示扇形或者其他形状的效果的话,我还没有尝试。大家如果有做的话,记得@我哈。]
点击橘红色的按个按钮之后,会弹出五个小按钮,形成一直角三角形。如果想让它展示扇形或者其他形状的效果的话,我还没有尝试。大家如果有做的话,记得@我哈。
然后,明确一下我们的目的:
我们的目的,是想让菜单里的子按钮依次散布在菜单按钮的周围,形成直角。因此,各个子按钮的Y值应该是依次减小的,而它们的X值则是依次增加,并且这个动画变化过程是同时进行的。
二、代码
首先,我们先来看XML文件。文件名是activity_main.

    <FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

   <ImageView
       android:id="@+id/img_b"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:padding="20dp"
       android:src="@drawable/presence_away"/>

    <ImageView
        android:id="@+id/img_c"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:src="@drawable/presence_audio_online"/>
    <ImageView
        android:id="@+id/img_d"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:src="@drawable/presence_busy"/>
    <ImageView
        android:id="@+id/img_e"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:src="@drawable/presence_online"/>
    <ImageView
        android:id="@+id/img_a"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:src="@drawable/ic_menu_add"/>
</FrameLayout>

内容很简单,一个framlayout布局,然后,将所有的子按钮和菜单按钮叠放在一起。需要注意的是,要将最后显示的图片(也就是所谓的菜单按钮)放在最上面。
然后,咱们再来看一下MainActivity.java。(后面会做解释)

   package com.example.myapplication;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity implements View.OnClickListener{
//数组存放图片ID,通过list进行图片遍历
    private int[] res = {R.id.img_a,R.id.img_b,
                    R.id.img_c,R.id.img_d,R.id.img_e};
    private List<ImageView> list_img = 
                       new ArrayList<ImageView>();
/*
 1.  flag为true,当点击按钮的时候,弹出菜单
 2.  flag为false,当点击按钮的时候,收回菜单
*/                       
    private boolean flag = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        for(int i=0;i<res.length;i++){
            ImageView img = (ImageView)  
                                   findViewById(res[i]);
            img.setOnClickListener(this);
            list_img.add(img);
        }
    }
    @Override
    public void onClick(View view){
        switch (view.getId()){
            case R.id.img_a:
                if(flag){
                    startAnim();  //弹出菜单动画
                }else{
                    closeAnim();  //收回菜单动画
                }
                break;
            default:
//这里只是简单的对弹出按钮的点击响应进行了处理,具体应用时可以进行完善 
  Toast.makeText(MainActivity.this,"click"+view.getId(),
                              Toast.LENGTH_SHORT).show();
                break;
        }
    }

    private void closeAnim(){
        for(int i =1;i<res.length;i++){
//给出一个沿Y轴移动的动画
    ObjectAnimator animator = ObjectAnimator.ofFloat(
list_img.get(i),"translationY",(res.length-i-1)*50f,0f );
//给出一个沿X轴移动的动画 
    ObjectAnimator animator1 = ObjectAnimator.ofFloat(
    list_img.get(i),"translationX",(i-1)*50f,0f );
    //定义属性动画集合的对象
            AnimatorSet animSet = new AnimatorSet();
    //通过with方法,让两个动画同时进行
            animSet.play(animator).with(animator1);
    //设置延迟时间,让菜单内容相继弹出
            animSet.setStartDelay(500);
            animSet.start();
    //然后,设置flag为true,当再次点击的时候,收回菜单
            flag = true;
        }
    }
 //两种方法的内容大体相同,只是动画属性的参数相反
    private void startAnim() {
        for(int i =1;i<res.length;i++){
       ObjectAnimator animator = ObjectAnimator.ofFloat(
       list_img.get(i),"translationY",  
                              0f,(res.length-i-1)*50f );
       ObjectAnimator animator1 = ObjectAnimator.ofFloat(
    list_img.get(i),"translationX", 0f , (i-1)*50f );
            AnimatorSet animSet = new AnimatorSet();
            animSet.play(animator).with(animator1);
            animSet.setStartDelay(500);
            animSet.start();
            flag = false;
        }
    }
}

三、说明
对照上面的代码,进行下面的一些解释:
1、这里解释一下ObjectAnimator对象的参数的含义:
ObjectAnimator animator = ObjectAnimator.ofFloat(
list_img.get(i),”translationY”,
0f,(res.length-i-1)*50f );
第一个是object对象,添加的是我们所要赋予动画效果的对象,
如我们的list_img.get(i)
第二个是动画属性,也就是我们想要的动画效果
之后的就是设置动画属性的参数,跟animation动画参数设置一样。

2、下面说明一下动画属性的参数设置:
再来明确一下我们的目的:我们的目的,是想让菜单里的子按钮依次散布在菜单按钮的周围,形成直角。因此,各个子按钮的Y值应该是依次减小的,而它们的X值则是依次增加,并且这个动画变化过程是同时进行的。 好,下面,我们借助list来进行参数设置。
对于”translationY”,我们让它从Y=0 的地方,依次往外弹出(res.length-i-1)*50f 的距离。50F是我们设置的各个子按钮之间Y轴的距离。i则代表我们加载的图片资源的序号。这里要注意!我们的i是从1开始的。也就是让菜单按钮保持不动,所以,为了让最后一个子按钮的Y值为零,也就是跟屏幕上端平行,我们还要再减一,即我们的乘数因子为(res.length-i-1)。当i=1的时候,第一个子按钮的Y值最大,距离屏幕上端最远,然后,随着i值的增大,子按钮的Y值逐渐减小,距离屏幕上端也越来越近。
同理,对于”translationX”,则是从X=0的地方,依次弹出(i-1)*50f的距离。

2、closeAnim()方法内容跟startAnim()大体相同,只是参数设置上略有区别。收回菜单的是,子按钮的动画轨迹跟弹出的时候是相反的,所以,我们只需要把动画属性的参数调换一下位置即可。如有疑问,请参考代码进行对比。

四、附文
1、对属性动画不熟悉的小伙伴,给大家推荐郭霖大侠的博客http://blog.youkuaiyun.com/guolin_blog/article/details/43536355
里面讲得很详细,可以收藏。我不是做广告的哦,只是资源分享下。
(^o^)/~
2、还有慕课网原版视频网址 http://www.imooc.com/learn/263
如果有说得不到位的地方,大家可以去参考。本人也算是刚刚菜鸟进阶一点点吧,所以大家如有更好的见解,我们也可以共同探讨、相互学习。同时,说明一下,我这里用的是android studio。但是不妨碍的,代码比较少,也很好理解,eclipse也比较容易实现。
3、OK,今天的内容就这些了,有不当的地方,大家多见谅、多沟通,我们共同探讨、相互学习。欢迎大家批评指教~

Unity开源海洋渲染方案Crest Ocean System入门与实战指南 在实时图形渲染领域,海洋水体模拟是构建沉浸式开放世界、航海模拟等场景的关键技术。其核心原理通常基于波浪频谱算法(如Gerstner波模型),通过GPU并行计算,高效合成不同尺度、方向的波浪,实现动态起伏的海面。这项技术的价值在于,它能够以较低的性能开销,为游戏和应用提供媲美3A大作的视觉真实感与动态交互能力,广泛应用于游戏开发、虚拟仿真和影视预演等领域。本文聚焦于Unity引擎中的**开源**解决方案——Crest Ocean System,它完美融合了**高性能**GPU渲染与零成本优势,详细解析其从环境 阅读详情

相关推荐

Gemini 2.5 Flash免费调用实操指南:稳定替代gemini-3-flash

Gemini API免费层并非统一配额,而是按模型类型(Stable/Preview)、调用方式和设备指纹三维隔离的精细化资源体系。gemini-2.5-flash作为Stable模型,享有长期有效的日均1000次请求、1M上下文、零token成本及高稳定性,是轻量级AI应用(如文档摘要、知识库问答、会议纪要生成)在免费额度内可持续运行的工程最优解;而gemini-3-flash属Preview模型,仅面向新账号提供30天/500次试用,受设备指纹强约束,实际可用性波动大。本文基于2025年6月最新API行

weixin_34195546的博客 809

android 界面散开动画,Android 欢迎界面淡出动画效果(Animation)

进入App后,想做一个画面的淡出效果,如图所示:代码非常简单1 MainActivity.javapackage com.example.testanimation;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import and...

weixin_34663092的博客 504

Android 带有弹出收缩动画的扇形菜单实例

本篇文章主要介绍了Android 带有弹出收缩动画的扇形菜单实例,具有一定的参考价值,有兴趣的可以了解一下

Android实现旋转、扩散、水波纹效果动画

先上图 可以将这种效果分为3个动画:1、旋转,2、扩散,3、水波纹效果 1、旋转 首先先确定角度,6个小球占满360°,因此每个小球之间相隔60°。将2π作为圆的一圈,那么可以确定相隔的角度为: float angle = (float) (Math.PI * 2 / mCircleColors.length); 由勾股定理可知: x = r * cos(angle) y = r * sin(a...

weixin_45253393的博客 3328

随机子空间集成方法原理与scikit-learn实践

集成学习通过组合多个基学习器的预测结果来提升模型性能,是机器学习中的核心方法之一。随机子空间方法作为集成学习的重要变体,其核心原理是通过对特征空间进行随机子采样来增加模型多样性。这种方法特别适合处理高维数据,能有效缓解维度灾难问题,常与决策树、K近邻等对特征选择敏感的基学习器配合使用。在scikit-learn中,可以通过BaggingClassifier和BaggingRegressor实现随机子空间集成,关键参数包括max_features和n_estimators。实际应用中,该方法在金融风控、医疗诊

weixin_33773084的博客 377

macOS 27下PlayCover“没有权限打开”的完整修复指南

macOS系统通过Gatekeeper、TCC(透明、同意与控制)和安全启动等机制,对第三方应用进行层层校验,以防范恶意代码。这些机制会检查应用的隔离属性、签名状态以及所需系统权限,当任一环节不满足时,就会出现“没有权限打开”的提示。对于开发者工具或未上架App Store的开源软件,这类拦截尤为常见。尤其在macOS 27上,系统进一步收紧了绕过策略,导致PlayCover等工具无法正常启动。本文以PlayCover为例,详细解析权限链路上的三道关卡,并给出清除隔离属性、调整SIP状态、重置TCC记录等完

weixin_32612263的博客 741

android 左移动画_Android 四种简单的动画(淡入淡出、旋转、移动、缩放效果)...

最近在Android开发当中,用到的动画效果。public void onClick(View arg0) {// TODO 自动生成的方法存根switch (arg0.getId()) {case R.id.danru://淡入淡出AnimationSet aset=new AnimationSet(true);AlphaAnimation aa=new AlphaAnimation(1,0);...

weixin_30831261的博客 333

A Side Scan Sonar Image Denoising Algorithm Based on Compound of Fuzzy Weighted Average and Kalman F

Abstract 水下侧扫声纳图像的噪声来源:高斯噪声、脉冲、斑点噪声。 传统方法只能移除部分噪声,并且去噪后容易造成细节模糊。 本文在考虑到噪声的随机性以后,提出一种融合了模糊加权平均和卡尔曼滤波的去噪方法。 在最大化保留图像细节的基础上,同时去除高斯噪声和脉冲噪声 一.Introduction 由于海底环境和声波自身干涉的影响,声纳图像生成的图像难免会有噪点。声纳采集的图像通常会有高斯噪声、脉...

qq_44516871的博客 927

android 界面散开动画,Activit跳转动画之界面上某个位置并裂开上下拉伸动画跳转...

需求:Activity(fragment)跳转的时候当前界面裂开,上下各自拉出手机屏幕,之后跳转到相对应的Activity.整体效果图如下思路:1,在当前Activity中截取当前手机的屏幕获取到bitmap,然后根据具体位置(比如这里是扫码图标中间裂开)计算获取到,中间裂开距离手机上和下的距离,在传递给跳转后的Activity(跳转前的Activity做两件事情,1,截取屏幕获取bitmap2,...

weixin_28909779的博客 423

VS code平台调试AutoLISP程序教程

VS code平台调试AutoLISP程序教程

BearElder的博客 3183

【2026OD新机考】【不定滑窗】20260415-API请求日志去重分析【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

中找到所有的连续的相同元素,同时统计对应的连续相同元素对应的值的平均值。:当右指针为第一个元素(没有前一个元素),或者右指针对应的元素。某微服务系统的日志监控平台需分析API调用记录,日志含大量。相等,说明当前元素仍然属于同一个相同元素窗口,将当前元素值。中的所有元素均相等,并且计算窗口和情况即可。请实现一个函数,对给定的日志数据去重合并处理。位置,表示开启一个新的窗口,此时需要重置窗口和。,为了优化重复的请求记录,存储和后续分析需对。:对应的响应时间数组(毫秒)。重新置为当前右指针的元素值。

weixin_48157259的博客 112

android 按钮变化动画_Flutter 不得不说的 Flare 动画

秦子帅明确目标,每天进步一点点.....作者| 前行的乌龟地址|juejin.im/post/5d7575a06fb9a06ae7642c78Flare 是一家可以快速制作 Flutter SVG 动画的网站,提供专门的 Flutter Weight 承载网站导出的动画文件,相当于 android 的 Lottie,Flare 的首次出现非常惊艳,是在 Flutter 发布大会...

weixin_39870413的博客 372

【推荐100个unity插件】对话系统插件——YarnSpinner-Unity插件

Yarn Spinner是一款专为游戏对话设计的脚本语言,适用于Unity等引擎。本文介绍了在Unity中安装和使用Yarn Spinner的完整流程:首先通过Package Manager添加仓库并安装插件;然后创建Yarn Script和Project文件,配置对话系统;接着编写Yarn脚本定义对话内容,并展示运行效果;最后讲解了按键控制和多语言本地化设置。该工具采用类似剧本的简洁格式,支持分支对话、条件逻辑等功能,能有效提升游戏叙事的开发效率。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2214

Cocos基础概念知识

【架构透视与数据流向图解】Cocos Creator 3.x 引入了高度可定制的现代渲染管线(Render Pipeline),支持跨平台的高性能图形渲染。其工作原理可以抽象为一个从“逻辑数据”到“屏幕像素”的数据流转换过程。【工作原理数据流图】场景图 (Scene Graph)➔渲染收集 (RenderFlow)➔渲染队列 (RenderQueue)➔渲染管线 (RenderPipeline)➔图形 API (WebGL/Vulkan)1. 场景漫游与数据收集(RenderFlow)

qq_52269550的博客 562

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 303

29、Power BI 中行级安全(RLS)的实现与应用

本文详细介绍了在Power BI中实现行级安全(RLS)的方法,包括静态RLS和动态RLS的实现流程、适用场景及对比分析。通过具体业务场景,展示了如何创建安全角色、定义规则、验证角色、发布模型以及分配成员。此外,还探讨了更复杂的动态RLS场景,如基于父子层次结构的数据访问控制和从外部源获取用户信息的实现方式。文章最后总结了最佳实践建议及未来发展趋势,为企业在Power BI中高效、安全地实施数据访问控制提供了全面指导。

terraform7cloud的博客 195

HarmonyOS 6.1.1 Map Kit 新特性落地实战:精品咖啡漫游场景下的搜索相关性评分与地图长按交互方案

** 主题色板接口:集中声明页面所有颜色字段(烘焙棕+奶泡米+焦糖金深色系) */bg: string;// 页面底色(烘焙棕深底)// 卡片底色(深咖)// 胶囊与输入框底色(咖啡渣棕)// 主标题色(奶泡米)// 次级文本色(燕麦奶色)// 弱文本色(浅烘焙棕)// 行业主色(焦糖金)// 主色深(深焦糖,渐变起点)// 主色浅(奶金高亮)// 副色(奶泡米黄)// 警示色(低相关/删除)// 信息色(湖蓝)// 分割线色// 底部 Tab 选中色// 弹窗遮罩色。

2401_86044991的博客 318

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 按钮变形动画,Android属性动画Animator实现卫星Button

动画效果,卫星Button扇形展开和关闭1. Animator和AnimationAnimator框架是android4.0之后添加的一个动画框架,和之前的Animation框架相比,Animator可以进行更多和更精细化的动画控制,而且比之前更简单和更高效。在4.0源码中随处都可以看到Animator的使用。在3.0系统之前,Android给我们提供了逐帧动画Frame Animation和补间...

weixin_35621342的博客 731

IEM模型,地表粗糙度模拟

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android水平平分两个按钮

Android水平平分两个按钮,附代码

cun的博客 3391

Android—过渡按钮的简单实现

Android 包含过渡框架,它使开发者能够轻松地为两个视图层次结构之间的变化设置动画。该框架通过随时间更改视图的某些属性值,在运行时为视图设置动画。该框架包括用于常见效果的内置动画,并允许开发者创建自定义动画和过渡生命周期回调。本项目基于此实现了一个过渡按钮。 登录成功页面(activity_new.xml) 主要代码 给登录按钮设置监听事件(MainActivity.xml) 点击登录按钮出现加载动画(TransitionButton.java) ValueAnimator.ofInt():由于

fjnu_se的博客 819

android 按钮点击动画效果_如何用纯css打造类materialUI的按钮点击动画并封装成react组件...

作为一个前端框架的重度使用者,在技术选型上也会非常注意其生态和完整性.笔者先后开发过基于vue,react,angular等框架的项目,碧如vue生态的elementUI, ant-design-vue, iView等成熟的UI框架, react生态的ant-design, materialUI等,这些第三方UI框架极大的降低了我们开发一个项目的成本和复杂度,使开发者更专注于实现业务逻辑...

weixin_39968266的博客 324

android简单弧形扇形菜单,2分钟教你实现环形/扇形菜单基础版

前言项目需要用到环形菜单,初略在网上找了一下,没有找到合适的,于是自己写了一个很简单的,后续再优化。这个组件是基于react,但是原理都一样。展开效果如下:实现css(less)@centerIconSize: 30px;.flex(@justify: flex-start, @align: center) {justify-content: @justify;align-items: @alig...

weixin_29623163的博客 950

【Android进阶】自定义控件实现底部扇形展开菜单效果

这个项目是优化的其他人的,主要优化了界面菜单的显示,下面开始。 先看效果图 项目的总结构 下面开始贴代码,由于必要的地方都添加了注释,所以不过多讲解 anim_button.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:an...

weixin_30681615的博客 540

仿的一个动画菜单效果

http://gundumw100.iteye.com/blog/1299953 记得在eoe上有人发过,但代码质量不好。我重写了一下,抽成了控件。但没有经过各种控件的相容性测试,如果和其他控件的相容性不好,就直接在activity中写代码吧,应该差不多的。 我用的是平板,所以效果还行,不知道手机如何。 代码: Java代码 package com.ql.vie...

hyshucom 211

Android 一个炫酷的扇形菜单

效果演示如何使用1、布局<com.rance.library.SectorMenuButton android:id="@+id/sector_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" app:aebAnimDurationMillis=

Rance935的专栏 8103
下一篇: # Android 蓝牙开发之数据通信
赫连达
博客等级 码龄12年 153粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值