目录

1.属性动画

1.什么是属性动画

2.ValueAnimator的使用方法

1.首先先创建四个按钮和一个图片 ,还要给布局设置ID

2.接下来在MainActivity里进行动画操作,这个是上下移动的动画

3.这个是缩放效果的动画

4.这个是旋转的同时进行透明度变化的动画

5.这个是圆形旋转的动画

2.ButterKnife(黄油刀)

1.引入外部资源

2.使用@BindView()

3.使用@OnClick()

4.在onCreate()中 ButterKnife.bind(this)

5.整体代码


1.属性动画

1.什么是属性动画

  • Andoid 3.0引入,可以说是补间动画的增强版,不止可以实现四种动画效果,可以定义任何属性的变化;

  • 执行动画的对象不只是U控件。可以对任何对象执行动画(不管是否显示在屏幕上)

  • 属性动画通过对目标对象进行赋值来修改其属性,上面那个按钮问题就不存在了

2.ValueAnimator的使用方法

直接上案例 

1.首先先创建四个按钮和一个图片 ,还要给布局设置ID 

<LinearLayout 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=".MainActivity"android:orientation="vertical"android:padding="15dp"android:id="@+id/ly_root"><Buttonandroid:id="@+id/but_01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画1" /><Buttonandroid:id="@+id/but_02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画2" /><Buttonandroid:id="@+id/but_03"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画3" /><Buttonandroid:id="@+id/but_04"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="动画4" /><ImageViewandroid:id="@+id/img_show"android:layout_width="match_parent"android:layout_height="wrap_content"app:srcCompat="@mipmap/img_babi" />
</LinearLayout>

2.接下来在MainActivity里进行动画操作,这个是上下移动的动画

声明容器和获取监听就不展示了哈

 public void onClick(View view) {
//这个是获取页面的宽和高width=ly_root.getWidth();height=ly_root.getHeight();
//这个是设置图片移动的区间ValueAnimator valueAnimator=ValueAnimator.ofInt(height,0,height/4,height/2,height/4*3,height);
//设置时间valueAnimator.setDuration(3000l);
//设置动画,开始让图片动起来valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {int x= (int) valueAnimator.getAnimatedValue();int y=width/2;
//引用方法,把x轴和y轴和图片传过去ac(x,y,img_show);}});valueAnimator.setInterpolator(new LinearInterpolator());
//开启动画valueAnimator.start();}
});//定义一个修改ImageView位置的方法
public void ac(int x,int y,View view){int left=y-view.getWidth()/2;int top=x-view.getHeight();int width1=left+view.getWidth();int height1=top+view.getHeight();view.layout(left,top,width1,height1);}

3.这个是缩放效果的动画

  private void scaleAnimator(){//这里故意用两个是想让大家体会下组合动画怎么用而已~final float scale = 0.5f;AnimatorSet scaleSet = new AnimatorSet();ValueAnimator valueAnimatorSmall = ValueAnimator.ofFloat(1.0f, scale);valueAnimatorSmall.setDuration(500);ValueAnimator valueAnimatorLarge = ValueAnimator.ofFloat(scale, 1.0f);valueAnimatorLarge.setDuration(500);valueAnimatorSmall.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float scale = (Float) animation.getAnimatedValue();img_babi.setScaleX(scale);img_babi.setScaleY(scale);}});valueAnimatorLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float scale = (Float) animation.getAnimatedValue();img_babi.setScaleX(scale);img_babi.setScaleY(scale);}});scaleSet.play(valueAnimatorLarge).after(valueAnimatorSmall);scaleSet.start();//其实可以一个就搞定的
//        ValueAnimator vValue = ValueAnimator.ofFloat(1.0f, 0.6f, 1.2f, 1.0f, 0.6f, 1.2f, 1.0f);
//        vValue.setDuration(1000L);
//        vValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
//            @Override
//            public void onAnimationUpdate(ValueAnimator animation) {
//                float scale = (Float) animation.getAnimatedValue();
//                img_babi.setScaleX(scale);
//                img_babi.setScaleY(scale);
//            }
//        });
//        vValue.setInterpolator(new LinearInterpolator());
//        vValue.start();}

4.这个是旋转的同时进行透明度变化的动画

 private void raAnimator(){ValueAnimator rValue = ValueAnimator.ofInt(0, 360);rValue.setDuration(1000L);rValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {int rotateValue = (Integer) animation.getAnimatedValue();img_babi.setRotation(rotateValue);float fractionValue = animation.getAnimatedFraction();img_babi.setAlpha(fractionValue);}});rValue.setInterpolator(new DecelerateInterpolator());rValue.start();}

  5.这个是圆形旋转的动画

protected void circleAnimator() {width = ly_root.getWidth();height = ly_root.getHeight();final int R = width / 4;ValueAnimator tValue = ValueAnimator.ofFloat(0,(float) (2.0f * Math.PI));tValue.setDuration(1000);tValue.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// 圆的参数方程 x = R * sin(t) y = R * cos(t)float t = (Float) animation.getAnimatedValue();int x = (int) (R * Math.sin(t) + width / 2);int y = (int) (R * Math.cos(t) + height / 2);moveView(img_babi, x, y);}});tValue.setInterpolator(new DecelerateInterpolator());tValue.start();}
}

2.ButterKnife(黄油刀)

ButterKnife就是可以简便点击事件的,其实还有其他作用的哈,不过我这学了这一个,就先展示这个

1.引入外部资源

              资源文件 

    implementation 'com.jakewharton:butterknife:10.2.3'// 添加此依赖
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'// 添加此规则

2.使用@BindView()

括号里面方按钮地址

@BindView(R.id.button1)Button button1;@BindView(R.id.button2)Button button2;@BindView(R.id.button3)Button button3;

3.使用@OnClick()

括号里面方按钮地址

    @OnClick(R.id.button1)private void an1(){Toast.makeText(MainActivity2.this,"按钮1",Toast.LENGTH_SHORT).show();}@OnClick(R.id.button2)private void an2(){Toast.makeText(MainActivity2.this,"按钮2",Toast.LENGTH_SHORT).show();}@OnClick(R.id.button3)private void an3(){Toast.makeText(MainActivity2.this,"按钮3",Toast.LENGTH_SHORT).show();}

4.在onCreate()中 ButterKnife.bind(this)

ButterKnife.bind(MainActivity2.this);

5.整体代码

package com.hopu.day11;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;public class MainActivity2 extends AppCompatActivity {@BindView(R.id.button1)Button button1;@BindView(R.id.button2)Button button2;@BindView(R.id.button3)Button button3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);ButterKnife.bind(MainActivity2.this);}@OnClick(R.id.button1)public void an1(){Toast.makeText(MainActivity2.this,"按钮1",Toast.LENGTH_SHORT).show();}@OnClick(R.id.button2)public void an2(){Toast.makeText(MainActivity2.this,"按钮2",Toast.LENGTH_SHORT).show();}@OnClick(R.id.button3)public void an3(){Toast.makeText(MainActivity2.this,"按钮3",Toast.LENGTH_SHORT).show();}
}

Android属性动画,和ButterKnife的使用方法相关推荐

  1. android动画封装,Android属性动画封装,快速构建动画

    Android实现动画效果的方式主要有帧动画.补间动画.属性动画.关于安桌动画的基础知识可以查看这篇文章Android属性动画完全解析 这里我要讲的是如何快速构建出一个动画效果,如下图: 如果我们用属 ...

  2. Android属性动画 ObjectAnimator

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118709616 本文出自[赵彦军的博客] 文章目录 ObjectAnimator ...

  3. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

  4. android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...

    大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...

  5. Android 系统(196)---Android 属性动画

    Android 属性动画 属性动画 总结&攻略 前言 动画的使用 是 Android 开发中常用的知识 本文将详细介绍 Android 动画中 属性动画的原理 & 使用 动画类型 关于 ...

  6. Android 属性动画Property Animation(中)

    Android 属性动画Property Animation(上)介绍了属性动画的概念以及相关的类和接口,本篇来看下具体肿么使用. ValueAnimator ValueAnimator指定整形.浮点 ...

  7. Android 属性动画使用(二)

    首先扯点别的:晚上稍微跑了一会步,然后逛了超市,晚饭喝的南瓜粥,吃了一碗面条,今天不是太饿,现在正一边吃着葡萄一边学习,也是没谁了. 比如说,我们想要实现从0过渡到100,使用ValueAnimato ...

  8. Android 属性动画(一)新手入门

    一.属性动画简介 Android 中动画有很多种,属性动画就是其中的一种.所谓的属性动画,就是在指定的时间内,通过改变对象的属性达到变化效果的动画.在 Android 中,属性动画系统是一个强健的框架 ...

  9. Android 属性动画 详解

    Android 属性动画 详解 Android动画类型: View Animation(即所谓的Tween Animation补间动画):View Animation相当简单,不过只能支持简单的缩放. ...

最新文章

  1. Anchor-free应用一览:目标检测、实例分割、多目标跟踪
  2. 如何使用 Python 操作 Git 代码?GitPython 入门介绍
  3. 总结一下php5.2.16与apache2.0的C++扩展开发整个过程
  4. Spring和Mybatis整合,配置文件
  5. 常用的生物学数据库及网站介绍,你都了解了吗?
  6. java excel 转pdf
  7. mysql innodb 全表锁,Mysql InnoDB行锁及表锁分享
  8. Java多线程系列(十一):ReentrantReadWriteLock的实现原理与锁获取详解
  9. php与mysql实例教程_mysql实例与连接
  10. ReportLab for PDF
  11. java raw types,java – 为Raw Types抛出不一致的ClassCastException
  12. Python学习week4-set集合
  13. 论制造业的报表开发项目需求
  14. linux 软件逆向工程,黑莓开源软件逆向工程 PE 文件的工具PE tree作为IDA插件的安装方式...
  15. 离散数学学习笔记——第七讲——特殊关系和函数(5.4 哈斯图和特殊元素)
  16. windows2003中了一键还原7.9的招了
  17. 领先三星、华为,全球首款可折叠柔性屏手机惊艳上市
  18. 使用opengl es编写2d游戏的一些说明和技巧
  19. 阿里云settings.xml配置
  20. STM8L051 同时使用RTC和USART通信

热门文章

  1. 我对软件应聘学生的建议
  2. python列表怎么比较大小_python列表怎么比较大小
  3. EditPlus格式化xml文档
  4. 电脑无法连接wifi得解决方法
  5. Android 使用Ant编译Android 工程
  6. 微信每日早安推送,自定义推送名称,企业号推送非订阅号测试号,python源码,无需第三方多个网站注册、无第三方接口,无基础快速上不了手
  7. 在线客服——各第三方的收费标准及服务提供
  8. 《数据结构(c++语言版)》 清华大学邓俊辉
  9. python3自动下载优酷视频小程序
  10. 推荐 :如何全面解析数据并创造数据故事