Android属性动画,和ButterKnife的使用方法
目录
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的使用方法相关推荐
- android动画封装,Android属性动画封装,快速构建动画
Android实现动画效果的方式主要有帧动画.补间动画.属性动画.关于安桌动画的基础知识可以查看这篇文章Android属性动画完全解析 这里我要讲的是如何快速构建出一个动画效果,如下图: 如果我们用属 ...
- Android属性动画 ObjectAnimator
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118709616 本文出自[赵彦军的博客] 文章目录 ObjectAnimator ...
- (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...
- android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...
大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...
- Android 系统(196)---Android 属性动画
Android 属性动画 属性动画 总结&攻略 前言 动画的使用 是 Android 开发中常用的知识 本文将详细介绍 Android 动画中 属性动画的原理 & 使用 动画类型 关于 ...
- Android 属性动画Property Animation(中)
Android 属性动画Property Animation(上)介绍了属性动画的概念以及相关的类和接口,本篇来看下具体肿么使用. ValueAnimator ValueAnimator指定整形.浮点 ...
- Android 属性动画使用(二)
首先扯点别的:晚上稍微跑了一会步,然后逛了超市,晚饭喝的南瓜粥,吃了一碗面条,今天不是太饿,现在正一边吃着葡萄一边学习,也是没谁了. 比如说,我们想要实现从0过渡到100,使用ValueAnimato ...
- Android 属性动画(一)新手入门
一.属性动画简介 Android 中动画有很多种,属性动画就是其中的一种.所谓的属性动画,就是在指定的时间内,通过改变对象的属性达到变化效果的动画.在 Android 中,属性动画系统是一个强健的框架 ...
- Android 属性动画 详解
Android 属性动画 详解 Android动画类型: View Animation(即所谓的Tween Animation补间动画):View Animation相当简单,不过只能支持简单的缩放. ...
最新文章
- Anchor-free应用一览:目标检测、实例分割、多目标跟踪
- 如何使用 Python 操作 Git 代码?GitPython 入门介绍
- 总结一下php5.2.16与apache2.0的C++扩展开发整个过程
- Spring和Mybatis整合,配置文件
- 常用的生物学数据库及网站介绍,你都了解了吗?
- java excel 转pdf
- mysql innodb 全表锁,Mysql InnoDB行锁及表锁分享
- Java多线程系列(十一):ReentrantReadWriteLock的实现原理与锁获取详解
- php与mysql实例教程_mysql实例与连接
- ReportLab for PDF
- java raw types,java – 为Raw Types抛出不一致的ClassCastException
- Python学习week4-set集合
- 论制造业的报表开发项目需求
- linux 软件逆向工程,黑莓开源软件逆向工程 PE 文件的工具PE tree作为IDA插件的安装方式...
- 离散数学学习笔记——第七讲——特殊关系和函数(5.4 哈斯图和特殊元素)
- windows2003中了一键还原7.9的招了
- 领先三星、华为,全球首款可折叠柔性屏手机惊艳上市
- 使用opengl es编写2d游戏的一些说明和技巧
- 阿里云settings.xml配置
- STM8L051 同时使用RTC和USART通信