帧动画的创建和属性动画+侧拉窗口

Cocos Creator - 制作精灵帧动画 本文档主要根据官方文档上的图集资源、动画系统、音乐和音效等章节内容进行综合使用。 1、制作图集 制作图集有两种工具: TexturePacker Zwoptex(只能在Windows上使用) 我这里使用TexturePacker进行图集制作: 1.准备原始图片,如下图: 这些都是单张的图,按顺序播放的话,能看出是佐助在释放千鸟技能的一个动画,我们现在就是要将这些图做成图集,并使用...... 阅读详情

创建drawable

 导入照片

 创建布局标红的是重要部分

 动画的开启关闭

属性动画

package com.example.day6_;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private Button brStart;
    private Button brStop;
    private ImageView lv;
    private AnimationDrawable manimationDrawable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        manimationDrawable=(AnimationDrawable) lv.getBackground();//得到帧动画

    }

    public void startFrame(View view) {
        if (!manimationDrawable.isRunning()){
            manimationDrawable.start();
        }
    }

    public void stopFrame(View view) {
        if (manimationDrawable.isRunning()){
            manimationDrawable.stop();
        }
    }

    private void initView() {
        brStart = (Button) findViewById(R.id.br_start);
        brStop = (Button) findViewById(R.id.br_stop);
        lv = (ImageView) findViewById(R.id.lv);
    }

    public void alpha(View view) {
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.alpha);//加载动画
        lv.startAnimation(animation);
    }

    //属性动画
    public void shuxing(View view) {
      //最后一位写成0就能实现消失
     ObjectAnimator alpha= ObjectAnimator.ofFloat(lv,"alpha",0,1,0.5f,1,1,0.5f);
//     alpha.setDuration(3000);
//     alpha.start();
        //旋转
        ObjectAnimator rotation= ObjectAnimator.ofFloat(lv,"Rotation",0,180,20,-180);
        rotation.setDuration(3000);
        rotation.start();
       //缩放
       ObjectAnimator scaleX= ObjectAnimator.ofFloat(lv,"scaleX",1,3,1,-1);
       //平移
        ObjectAnimator translationX= ObjectAnimator.ofFloat(lv,"translationX",0,200,0,-300);

        //组合动画
        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.setDuration(3000);
        animatorSet.start();
//        animatorSet.playTogether(alpha,rotation,scaleX,translationX);//一起播放
        animatorSet.play(alpha).before(rotation).before(scaleX).after(translationX);



    }
}

侧拉窗口:

侧拉布局:

布局代码: 

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".DrawerLayoutActivity"
    tools:ignore="MissingDefaultResource"
    android:id="@+id/dr"
    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <Button
            android:id="@+id/but"
            android:text="打开抽屉"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </Button>
    </LinearLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nag"
        //连接布局
        app:headerLayout="@layout/layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         //连接布局
        app:menu="@menu/menu"
        android:layout_gravity="start">
    </com.google.android.material.navigation.NavigationView>

</androidx.drawerlayout.widget.DrawerLayout>

创建连接layout布局和主布局连接

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
  <ImageView
      android:id="@+id/header_iv"
      android:layout_width="match_parent"
      android:layout_height="200dp"
      android:layout_gravity="center"
      android:padding="5dp"
      android:src="@mipmap/ic_launcher_round">
  </ImageView>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/header_tv"
        android:gravity="center"
        android:padding="10dp"
        android:text="tc">
    </TextView>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/header_desc"
        android:gravity="center"
        android:padding="10dp"
        android:text="这里是侧拉菜单的描述,可以写一封资料">
    </TextView>
</LinearLayout>

创建menu布局

menu布局代码实现:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/aa"
      android:icon="@drawable/aa" android:title="首页"/>
    <item android:id="@+id/bb"
        android:icon="@drawable/bb" android:title="首页"/>
    <item android:id="@+id/cc"
        android:icon="@drawable/cc" android:title="首页"/>
</menu>

Activity页面

package com.example.day9_touchevent1;

import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.drawerlayout.widget.DrawerLayout;

import com.bumptech.glide.Glide;
import com.google.android.material.navigation.NavigationView;
import com.wildma.pictureselector.PictureBean;
import com.wildma.pictureselector.PictureSelector;

public class DrawerLayoutActivity extends AppCompatActivity {
    private DrawerLayout dr;
    private Button but;
    private NavigationView nag;
     private  ImageView viewById;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawer_layout);
        initView();
        but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dr.openDrawer(Gravity.LEFT);
            }
        });
        //可以添加多个头布局,当前0代表获取index为0的头布局
        //可以获取layout里面的id
        View headerView = nag.getHeaderView(0);
        TextView user =headerView.findViewById(R.id.header_tv);
        user.setText("周坤");

        //menu联动
        nag.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
             @Override
             public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                if (item.getItemId()==R.id.aa){
                    Toast.makeText(DrawerLayoutActivity.this, "点击了home", Toast.LENGTH_SHORT).show();
                    dr.close();
                }else if (item.getItemId()==R.id.bb){
                    Toast.makeText(DrawerLayoutActivity.this, "点击了chat", Toast.LENGTH_SHORT).show();
                    dr.close();
                }else {
                    Toast.makeText(DrawerLayoutActivity.this, "点击了mine", Toast.LENGTH_SHORT).show();
                    dr.close();
                }

                 return false;
             }
         });
        //通过headerView拿到图片id
        viewById = headerView.findViewById(R.id.header_iv);
        viewById.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PictureSelector.create(DrawerLayoutActivity.this,101).selectPicture();
            }
        });

    }
     //更换头像
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==101&&resultCode==RESULT_OK){
            PictureBean pictureSelector= (PictureBean) data.getExtras().get(PictureSelector.PICTURE_RESULT);
            Glide.with(this).load(pictureSelector.getPath()).into(viewById);
        }
    }

    private void initView() {
        dr = (DrawerLayout) findViewById(R.id.dr);
        but = (Button) findViewById(R.id.but);
        nag = (NavigationView) findViewById(R.id.nag);
    }
}

效果展示:

Unity3D UI帧动画详解 在Unity3D中,我们可以将一组图片放在一个序列帧动画中,并通过控制图片的显示顺序和播放速度来实现动画效果。具体来说,我们可以使用Unity3D中的Image组件来显示序列帧动画,使用Animation组件来控制动画的播放。动画剪辑是用于播放动画的组件,它将动画状态和动画控制器连接起来。在Unity3D中,我们可以通过选中动画状态,然后点击Inspector面板中的"Create"按钮来创建一个动画剪辑。在动画控制器中,我们需要创建一个动画状态机来管理和控制动画的状态。一、UI帧动画的基本原理。 阅读详情

相关推荐

Android开发学习笔记——View动画和属性动画

View动画和属性动画View动画帧动画基本实现xml实现AnimationDrawable实现注意事项补间动画基本种类和属性平移动画TranslateAnimation缩放动画ScaleAnimation旋转动画RotateAnimation透明度动画AlphaAnimation动画集合常用属性注意事项动画监听LayoutAnimation和Activity切换动画属性动画基本使用ValueAnimatorObjectAnimatorAnimatorSet监听器属性动画的XML插值器和估值器属性动画和Vi

qq_36425800的博客 1327

Ps:创建帧动画

在 Photoshop 中,帧动画 Frame Animation是一种通过在“时间轴”面板中创建和管理多个帧来实现动画效果的方式。所谓帧动画,也就是传统意义上的逐帧动画,依次播放每个帧而构成的动画形式。每个帧记录了“图层”面板上所有图层的属性状态(可见性、位置、不透明度、混合模式以及图层样式)。这种方法特别适合于制作简单的动画,如 GIF 图像等。◆◆◆创建帧动画的步骤及说明1、创建新文...

qq_41176800的博客 3190

Blender帧动画

多条曲线显示时,由于不同曲线的变化范围不一致,导致曲线观察不方便,可以开启曲线规格化,使所有曲线纵轴范围为-1~1。定义一个帧动画类似unity的Timeline,只需定义关键帧,过渡帧会自动差值计算。变量为发生变化的量,如坐标X/Y/Z的位置,一个变量对应一个通道。关键帧Key-frame,记录了一个关键数据。曲线值插值函数曲线(F曲线/F-Curve)-绿色,普通帧,其数值由插值计算而来。-橙色,此帧被修改,但未记录(保存)-视图:方法,平移,框显全部。-选择一个通道,外插一个循环。

qq_42720695的博客 1604

HarmonyOS之帧动画、数值动画、属性动画和组合动画的效果实现

一、概述 动画是组件的基础特性之一,精心设计的动画使UI变化更直观,有助于改进应用程序的外观并改善用户体验。 Java UI 框架提供了帧动画、数值动画和属性动画,并提供了将多个动画同时操作的动画集合。 二、帧动画 帧动画是利用视觉暂留现象,将一系列静止的图片按序播放,给用户产生动画的效果。 在“Project”窗口,打开“entry > src > main > resources > base > media”,添加一系列图片至“media”目录下: 在“gra

╰つ栺尖篴夢ゞ 7086

Qt 之窗口移动的动画效果

关于窗口的动画效果,开始的时候找了很多材料,但是都不怎么看的下去,最终还是决定要好好静下心来将它搞定,而且一定还有是有图有真相的那种。   对于这个窗口的移动的动画效果,主要是通过鼠标单击按钮的时候产生的信号让状态发生改变,    当第一次单击的时候,将从状态1转变为状态2.第二次的时候从状态2,转变为状态1.,同时为了装换的过程中更加流畅,给其增加了动画的效果。   在这里简单的介绍一下。

lmzqm的专栏 5937

【Unity动画系统】Unity动画系统Animation详解,参数细节你是否弄清?

Unity中现存两套动画系统Legacy动画系统和Mecanim动画系统

秩沅 5809

【零基础入门unity游戏开发——动画篇】Animation动画窗口,创建编辑动画

零基础入门unity游戏开发——动画篇】Animation动画窗口,创建编辑动画

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

学术类PPT制作总结

本文分享了科技类PPT的制作技巧,希望相关的信息能帮助到读者。

奇妙水果的技术博客,欢迎交流技术~ 2874

Android T 窗口动画(本地动画)显示流程

如何创建一个窗口动画?我们通过先从APP创建一个窗口,以这个窗口的创建过程的窗口动画为例这个demo就是点击BUTTON显示窗口,点击CLOSE WINDOW关闭窗口

yimelancholy的博客 6298

量化策略分享 | MA超进化:LLT低延迟趋势线

移动平均线(MA)是我们技术分析中常用的一种趋势跟踪指标,但在使用的时候你是否也会有这样的烦恼:交易信号延迟太久,或者交易信号太频繁了!延迟性和平滑性问题似乎是不可兼得的“鱼和熊掌”。 针对这个问题,广发证券基于通信领域的滤波器原理,在《短线择时策略研究之三:低延迟趋势线与交易性择时》中创造性构建了:LLT低延迟趋势线(Low-lag Trendline)。 LLT低延迟趋势线是一种二阶滤波器,阶数相对适宜,相比MA、EMA等均线指标能够降低延迟,同时增强在低频部分的输出信号。 当然,..

量化交易研究 5295

H3C IPsec over GRE VPN 实验

配置 IPsec over GRE VPN 来连通两端内网

M建的博客 2396

《Android 应用开发基础教程》——第十五章:Android 动画机制详解(属性动画、帧动画、过渡动画)

帧动画:适合静态图片连续播放,但资源占用大补间动画:简单快速,适合临时效果,但无法改变属性值属性动画:现代 Android 推荐使用方式,可操作任意属性值可使用组合动画,或用简化代码。

WenJGo的博客 1355

大模型部署指南:SGLang 框架

本文介绍使用 SGLang 框架部署大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1599

Unity中的动画系统(一)——创建一个动画,Animation窗口各项功能

1.创建一个动画 选中一个GameObject 在菜单栏中Window处选择Animation,弹出窗口,点击create,并进行命名。 创建完毕后,选择创建出的动画控制器,菜单栏Window中选择Animator,弹出动画控制器窗口 2.Animation窗口 点击“Add Property”,可为动画添加属性 窗口中“Samples”的数值为1秒的动画帧数,此处图中显示1秒有60帧 ...

Blueekyyy 7882

NVIDIA Isaac Sim 入门教程(二)

Omniverse Isaac Sim 的工作空间非常容易自定义。调整用户界面的大小、停靠、取消停靠、添加和移除面板都非常容易。进入顶部菜单栏,单击下拉菜单最下方的窗口 > 视口 > 视口 2(现在工作区中应该会出现一个名为 "视口 2 "的新视口。如果您想创建更多的视口,请按照相机检查器扩展进行操作。单击并拖动视口 2 的顶部标题以激活停靠部件。拖放到原始视口的右侧,将两个视口并排放置。单击并向左拖动视口 2 的左侧,使视口大小相等。

机器人控制与仿真应用 6537

RK+linux教程:RK3588 RGA硬件加速在YOLOv5图像预处理中的深度应用教程

摘要: 本教程深入解析了RK3588芯片的RGA硬件加速器在YOLOv5图像预处理中的应用。通过专用硬件设计,RGA支持图像缩放、边界填充等核心操作,结合零拷贝技术显著提升处理效率。重点分析了LetterBox算法的RGA实现,包括参数计算、边界填充和性能优化,并与传统CPU处理对比,展示了RGA在高分辨率图像处理中的优势。教程还提供了统一的预处理接口设计,便于在OpenCV与RGA方案间灵活切换,为RK3588平台的深度学习部署提供实用优化方案。

LXY_LOVE36的博客 968

Android窗口动画

android 窗口动画

qq_41095045的博客 3381

【Bug已解决】Codex Desktop 报错 Computer Use 插件不可用的解决方案

方案适用场景推荐指数让 Codex 自查修复首选的快速尝试方式⭐⭐⭐⭐⭐清理插件缓存重启明确怀疑是本地缓存损坏⭐⭐⭐⭐彻底卸载重装前两个方案无效时的进阶方案⭐⭐⭐⭐检查安全软件拦截企业电脑/装有严格安全软件的环境⭐⭐⭐确认账号权限范围排除功能本身未开放的可能性⭐⭐⭐Codex Desktop 报Computer Use 插件不可用的本质是客户端内置的插件资源在本地未被正确解包或注册到插件市场索引中,而不是真的缺少安装包。优先尝试让 Codex 自身检测并修复本地插件环境。

一键难忘的博客 5971

PS基础操作-帧动画制作-学习记录

PS创建帧动画

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 8118

springboot整合sharding-jdbc实现分库分表详解

springboot整合sharding-jdbc实现分库分表详解

congge 9085

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android动画分类及原理

窗口动画主要涉及Activity或窗口(Window)的进入、退出等视觉效果。

望佑 2298

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Unity Animation--动画窗口指南(使用动画视图)

如果在播放头位于关键帧之间时进行了更改(因此显示的值是一个插值),则将使用您输入的新值在该点创建一个新的关键帧。在上面的示例中,机械臂的GameObject层次结构的各个部分都在同一动画剪辑中进行了动画处理。在下面的图像中,“动画”视图(左)显示了当前选定的GameObject及其子子GameObject(如果它们也受此Animation控制)使用的动画。右侧的“视图和“层次结构”视图中,这表明“动画”视图显示了附加到当前所选GameObject的“动画”。在尚未录制动画的新创建的剪辑中,此列表为空。

爱编程的鱼的博客 2744

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Qt】Qt属性动画

Qt动画框架提供了一种对 GUI 元素进行动画处理的简单方法,它使开发者能够对Widget或QObject的 Qt 属性值进行动画处理,该框架提供的大多数功能在Qt Quick中也可用,可以在其中以声明方式定义动画。在本概述中,我们将解释了其体系结构的基础, 并且提供一些的最常见动画处理技术的示例。

一点一点变好 2691

WPF 基于帧的动画

 除基于属性的动画系统外,WPF提供了一种创建基于帧的动画的方法,这种方法只使用代码。需要做的全部工作是响应静态的CompositionTarge.Rendering事件,触发该事件是为了给每帧获取内容。这是一种非常低级的方法,除非使用标准的基于属性的动画模型不能满足需要(例如,构建简单的侧边滚动游戏、创建基于物理的动画式构建粒子效果模型(如火焰、雪花以及气泡)),否则不会希望使用这种方法。   构建基于帧的动画的基本技术很容易。只需要为静态的CompositionTarget.Rendering事件关联

technologyleader的专栏 833

Unity2D创建帧动画片段

动画是游戏中一种使对象表现出运动或变换的方式。当涉及到动画时,我们通常就会用到Animator组件。它允许我们在Unity编辑器中创建、管理和控制这些动画,并将其应用于游戏对象。这篇文章将对Animator组件的使用进行部分讲解。

充满智慧的博客 1584

IOS UILabel 、帧动画

UILabel 、创建帧动画 1、UIlabel以及它的一些基本属性 2、UIImageView 3、创建帧动画的四要素

rui789的博客 1061
上一篇: MVP框架搭建
下一篇: 三级联动+放大缩小功能+时间列表
搬砖猿小周
博客等级 码龄3年 4粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值