Android 动画学习笔记(二)

引言

学习动画的过程中,发现并没有那么简单。
以前只知道补间动画,属性动画,现在觉得真是弟弟。
话不多说,开始总结。

本文引用了一些网络图片,在此感谢各位作者。

转场动画

Android提供了三种现成的动画:explode、slide、fade

explodeslidefade

实现转场动画步骤如下:
1.设置windowContentTransitions属性为true
java:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

XML:

 <item name="android:windowContentTransitions">true</item>

2.设置Enter(进入) / Exit(退出) 效果

setExitTransition() - 当A startB时,使A中的View退出场景的transition 在A中设置

setEnterTransition() - 当A startB时,使B中的View进入场景的transition 在B中设置

setReturnTransition() - 当B 返回A时,使B中的View退出场景的transition 在B中设置

setReenterTransition() - 当B 返回A时,使A中的View进入场景的transition 在A中设置

java:

Slide slide = new Slide(Gravity.BOTTOM);
slide.setDuration(200);
getWindow().setEnterTransition(slide);

XML:
首先在res/下建立transition目录,将以下xml放入transition目录下。

<?xml version="1.0" encoding="utf-8"?>
<fade xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000">
</fade>

然后在Activity中设置transition

Transition transition = TransitionInflater.from(this).inflateTransition(R.transition.activity_fade);
getWindow().setExitTransition(transition );

3.跳转界面时调用startActivity(Intent intent, Bundle options)方法
必须调用这个方法才有效果。

startActivity(intent,ActivityOptions.makeBasic().toBundle());

共享元素

共享元素会实现跳转时的无缝动画。

效果

可以看到其中的共享因素为头像及昵称

实现步骤:

设置windowContentTransitions属性为true,上文有。

我们假设A 界面跳转到 B界面

1.A界面
在跳转到B界面时,需要传入ActivityOptions作为参数

ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation(this,
                        Pair.create(findViewById(R.id.tv_share), "share_text"),
                        Pair.create(findViewById(R.id.img_share), "share"));
                startActivity(intent,transitionActivityOptions.toBundle());

这里的Pair是共享元素,调用Pair <A, B> create(A a, B b) 方法添加一个共享元素,如:

Pair.create(findViewById(R.id.img_share), "share"));

这里的两个参数分别为:

1.所要共享的View控件 2.标识符(这里的标识符要与B界面的共享元素xml中transitionName属性一致)

B界面:
Java代码无需操作,只需要在布局XML中为目标控件设置transitionName

如下:

注意一下android:transitionName属性的值要与传过来的Pair中的标识符一致

 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="share_text"
        android:text="Share TXT"
        />

这样就完成啦。

揭示动画

效果

主要方法:

ViewAnimationUtils.createCircularReveal(View view, int centerX,  int centerY, float startRadius, float endRadius)

参数说明:第一个为目标View,第二、三个是揭露动画中心点坐标,第四个是开始的半径,第五个为结束半径。

结束半径一般为对角线长度(因为只有半径为对角线长度才不会有少揭示的动画)

注意:

使用时揭示动画一般会切换View的显示状态

1.从Visible 到Invisible要在结束时设置setVisiblity(View.INVISIBLE);
2.从Invisible到Visible要在显示的时候设置setVisiblity(View.VISIBLE);

原因是从显示到隐藏是在最后动画结束的时候隐藏,而隐藏到显示是需要在开始的时候就将View设可见的,不然是没有效果的。

触摸反馈动画

1.如何修改默认颜色?

使用Rippe标签的XML文件自定义Ripple颜色

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorPrimary">
</ripple>

设置background即可

2.有边界与无边界如何使用?

有边界:

android:background="?android:attr/selectableItemBackground"

无边界:

android:background="?android:attr/selectableItemBackgroundBorderless"

3.形状控制矩形、圆形及设置默认颜色

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorPrimary">

    <item>
        <shape android:shape="rectangle"
            >
            <solid android:color="@color/colorPrimaryDark"/>
        </shape>
    </item>

</ripple>

ripple标签下的color是设置水波纹颜色,shape标签的shape控制形状,shape->solid ->color是默认背景颜色

矢量图动画(SVG)

1.为什么要使用SVG图?

(1)SVG图不会随着分辨率变化而失真
(2)用XML语言描述,易于修改
(3)跨平台

2.如何使用SVG图
(1)获取SVG图途径
Android Studio编译器自带New->Vector Assets选择对应图片,填写大小就完成啦

从阿里图库获取阿里矢量图

(2)使用SVG图

vector标签

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
 
        <path
            android:fillColor="#FF000000"
            android:pathData="M12,3v9.28c-0.47,-0.17 -0.97,-0.28 -1.5,-0.28C8.01,12 6,14.01 6,16.5S8.01,21 10.5,21c2.31,0 4.2,-1.75 4.45,-4H15V6h4V3h-7z" />
 
</vector>

设置background即可

3.SVG 动画

vector.xml SVG图资源

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
    <group
        android:name="test"
        android:rotation="0"
        android:pivotX="12"
        android:pivotY="12"
        >
        <path
            android:fillColor="#FF000000"
            android:pathData="M12,3v9.28c-0.47,-0.17 -0.97,-0.28 -1.5,-0.28C8.01,12 6,14.01 6,16.5S8.01,21 10.5,21c2.31,0 4.2,-1.75 4.45,-4H15V6h4V3h-7z" />
    </group>
</vector>

objectionAnimator属性动画控制属性

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="4000"
    android:propertyName="rotation"
    android:valueFrom="0"
    android:valueTo="360">

</objectAnimator>

胶水animated-vector,作用:将属性动画与Vector图资源连接在一起

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_audiotrack_black_24dp">
    <target
        android:name="test"
        android:animation="@animator/anim" />

</animated-vector>

JAVA代码使用:

Drawable drawable = img.getDrawable();
                if(drawable instanceof Animatable) {
                    ((Animatable) drawable).start();
                }

除了使用这种形式的动画,还可以用一般的动画实现效果。

注意:

1.target中的name名称要与vector0>group下的name属性一致。

2.如果是旋转动画或者缩放动画要制定坐标即android:pivotX,android:pivotY其中的值对应android:viewportWidth,android:viewportHeight,如果是中心点,即两个值的一半,如上面的情况要填24/2=12。

3.android:propertyName这里的值要与group下需要变化的值相同。

特殊属性

1.fillAfter 覆盖最后的状态,意思是动画结束后保持最后的效果。
2.fillBefore 覆盖最开始的小姑哦,意思是动画结束后保持最开始的效果。
3.repeatMode 重复模式reverse(从结束的位置继续)、restart(重新开始)
4.repeatCount 重复次数,-1为一直循环
5.objectAnimator属性的valueType 值类型:intType、floatType、colorType、pathType
6.objectAnimator属性的valueFrom,valueTo与valueType一起使用,从某个值到某个值。
7.interpolator 插值器,数据变化速率控制器
8.propertyName 属性名称,使用此动画的控件需要有该名称的set方法,如properName = “size” 控件需要有对应的setSize方法。

为objectAnimator xml绑定View:

Animator animator = AnimatorInflater.loadAnimator(this, R.animator.alpha);
animator.setTarget(imageView);
animator.start();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio是Google推出的Android应用程序开发工具,它集成了开发、调试、打包等功能。要学习使用Android Studio,需要了解以下几个方面的知识: 1. Java基础: Android开发是基于Java语言的,所以要学习Android Studio首先要掌握Java基础知识。 2. Android基础: 了解Android操作系统的基本构架和常用组件,如Activity、Service、BroadcastReceiver等。 3. Android Studio使用: 了解Android Studio的基本界面和常用功能,如创建工程、编写代码、调试程序等。 4. Android SDK: 了解Android SDK的安装和配置,以及如何使用SDK Manager来下载SDK并配置项目。 5. 练习实践: 多练习实际项目,熟悉Android Studio的使用,并不断练习和完善自己的技能。 ### 回答2: Android Studio 是一个为 Android 来开发的整体开发环境。它基于 IntelliJ IDEA ,强调速度和智能操作,并致力于为应用程序开发提供高效率的开发工具。Android Studio 的推出,使得 Android 开发者更加容易地创建高质量的应用程序。 首先,要学 Android Studio ,你需要首先了解一些基本知识。学习 Android Studio 的工具包括 Gradle 、 Kotlin 和 Java 等。通过学习这些基础知识,你可以了解不同的语言、工具和框架。 在学习 Android Studio 时要使用实战性的方法。也就是说,每次学习新的东西时,你需要找到一个相关的例子。这样可以帮助你更好地理解它。如果你使用 Android Studio 模板,这将非常有用。这些模板可以帮助你创建常见的应用程序结构,并且你可以基于这些模板创建自己的应用程序。 另外,还有很多不同的工具和插件可以帮助你学习 Android Studio 。例如, Android Studio 网站上有很多有用的文章和教程,可以帮助你更好地理解 Android Studio 。还有很多在线工具可以帮助你实现特定的功能,在初学者阶段,这些工具可以为学习的难度减轻很多。 总之,学习 Android Studio 任重而道远。需要有耐心和时间,还需要不断地尝试和实践。在这个过程中,你可以尝试教学资料、交流学习合作、进一步增强你的知识水平。通过不断的应用和实践,一定可以成为一名优秀的 Android 开发者并圆满地完成应用开发。 ### 回答3: 作为一个应用开发者,学习使用安卓应用程序开发套件非常重要。Android Studio是Google出品的最新安卓开发工具,它具有多种强大的工具和功能,可以极大地提高应用程序的开发效率和质量。在学习过程中,个人对Android Studio的理解主要体现在以下几个方面。 首先,要开始使用Android Studio,需要了解它的基本结构和工具。Android Studio主要由三个主要组件组成:IDE、SDK、和Emulator。IDE是开发者使用的主要工具。它提供了编写、测试和调试代码所需的所有基本功能,包括视觉化设计器,代码编辑器和调试工具。SDK是开发应用程序所需的软件开发包。它包括实用程序和库,可用于在应用程序中实现预定功能。Emulator是一个虚拟的安卓设备,可以用来在开发应用程序时模拟真实设备上的应用程序运行情况。 其次,一些基本的编程知识也必不可少,例如Java编程、XML语言、UI界面设计等。Java是Android Studio中最常用的编程语言,用于编写应用程序的逻辑代码;XML语言则用于设计UI界面。在学习这些基本知识时,建议首先了解Java语言特性和面向对象编程理念,熟悉它们的基本语法和数据类型。同时,也可以通过在线教程和网课等方式加强对UI设计和布局的理解。 最后,学会使用网上的资源和社区的帮助非常重要。Android Studio的开发者社区很大,有很多在线资源可以帮助开发者的开发学习,例如stack overflow、CSDN社区等。同时,Google官方的开发者网站也提供了大量的文档资料、教程、API使用说明等。 总之,Android Studio的学习需要进行持续不断的针对不同方面的学习和实践。要充分运用Android Studio的强大功能,建议在掌握基础知识的基础上,多做实际的项目练习,不断提高自己的技术水平和代码能力,才能成为一名优秀的安卓应用程序开发者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值