anim中的
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="100%"
android:toYDelta="0%"
android:duration = "3000"
>
</translate>
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0%"
android:toYDelta="-100%"
android:duration = "3000"
>
</translate>
animator中的
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="rotationX"
android:valueFrom="0"
android:valueTo="720"
android:valueType="floatType"
android:duration="3000"
/>
<?xml version="1.0" encoding="utf-8"?>
<!--
android:propertyName="" 属性名称
属性名称:
位移: translationX translationY
旋转: rotation rotationX rotationY
缩放: scaleX scaleY
透明: alpha
android:valueFrom="" 开始的值
android:valueTo="" 结束的值
android:valueType="" 值的类型
-->
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="3.0"
android:valueType="floatType"
android:duration="3000"
>
</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="scaleY"
android:valueFrom="1.0"
android:valueTo="3.0"
android:valueType="floatType"
android:duration="3000"
>
</objectAnimator>
<?xml version="1.0" encoding="utf-8"?>
<!--
android:ordering="sequentially" 集合动画的执行方式
sequentially 依次执行her 一起执行
toget
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together"
>
<!--缩放X-->
<objectAnimator
android:propertyName="scaleX"
android:valueFrom="1"
android:valueTo="3"
android:valueType="floatType"
android:duration="3000"
/>
<!--缩放Y-->
<objectAnimator
android:propertyName="scaleY"
android:valueFrom="1"
android:valueTo="3"
android:valueType="floatType"
android:duration="3000"
/>
<!--移动Y 向上-->
<objectAnimator
android:propertyName="translationY"
android:valueFrom="0"
android:valueTo="-1500"
android:valueType="floatType"
android:duration="3000"
/>
</set>
//主界面
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view) {
switch (view.getId())
{
case R.id.but_01:
Intent intent = new Intent(MainActivity.this, InfoActivity.class);
startActivity(intent);
//添加切换的动画 -- 补间动画 -- res/anim 文件夹
//进入时的动画 -- InfoActivity, 退出时的动画 -- MainActivity
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
break;
case R.id.but_02:
startActivity(new Intent(this, TweenActivity.class));
break;
case R.id.but_03:
startActivity(new Intent(this,PropertyActivity01.class));
break;
case R.id.but_04:
startActivity(new Intent(this, PropertyActivity02.class));
break;
case R.id.but_05:
startActivity(new Intent(this, PropertyActivity03.class));
break;
}
}
}
//补间效果
/**
* 验证: 而补间动画, 更改的View 的绘制效果, 真正的属性依然保留在以前的位置上
*/
public class TweenActivity extends AppCompatActivity {
private ImageView mIv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tween);
mIv = (ImageView) findViewById(R.id.iv_id);
mIv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(TweenActivity.this, "我是团子小可爱, 啦啦啦啦......", Toast.LENGTH_SHORT).show();
}
});
}
//点击按钮, 播放动画 --- 位移
public void onClick(View view) {
TranslateAnimation translateAnimation = new TranslateAnimation(0,0,0,600);
translateAnimation.setDuration(3000);
translateAnimation.setFillAfter(true);
mIv.startAnimation(translateAnimation);
}
}
/**
* 资源文件 , 创建属性动画
*
* 1, 在res 中 创建文件夹, animator 文件夹, 在该文件夹中, 创建xml 的文件
*
* 2, 在文件中创建动画
* 单个动画 --- <objectAnimator></objectAnimator>
* 多个动画 --- <set></set>
*
* 3, 在Activity 中加载动画
* 3.1 加载动画资源
* ObjectAnimator animator = AnimatorInflater.loadAnimator(上下文对象, 动画资源的id);
* 3.2 设置执行该动画的控件
* animator.setTarget(mIv);
* 3.3 启动动画
* animator.start();
*/
public class PropertyActivity01 extends AppCompatActivity {
private ImageView mIv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_property01);
mIv = (ImageView) findViewById(R.id.iv_id);
}
//点击播放动画
public void onClick(View view) {
switch (view.getId())
{
case R.id.but_01:
//缩放X轴的动画
//1, 加载动画资源 -- 通过动画加载器来加载
ObjectAnimator scaleXAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.scale_x);
//2, 设置执行该动画资源的控件
scaleXAnimator.setTarget(mIv);
//3, 启动动画
scaleXAnimator.start();
break;
case R.id.but_02:
//缩放Y轴的动画
//1, 加载动画资源
ObjectAnimator scaleYAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.scale_y);
//2, 设置执行该动画的控件
scaleYAnimator.setTarget(mIv);
//3, 启动动画
scaleYAnimator.start();
break;
case R.id.but_03:
//旋转 X
ObjectAnimator rotationAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.rotation_x);
rotationAnimator.setTarget(mIv);
rotationAnimator.start();
//TODO 监听器一: 监听动画变化时的实时数据 addUpdateListener
rotationAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
}
});
//TODO 监听器二:监听动画改变时的状态 addListener
rotationAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
break;
case R.id.but_04:
//1, 加载动画资源
Animator animator = AnimatorInflater.loadAnimator(this,R.animator.set_animator);
//2, 设置显示动画的控件
animator.setTarget(mIv);
//3, 启动动画
animator.start();
break;
}
}
}
//定义动画
/**
* 1, 定义动画对象
* 执行动画的控件, 动画的属性名称 , 动画的属性值 -- 可变长度的数组
* 属性名称:
位移: translationX translationY
旋转: rotation rotationX rotationY
缩放: scaleX scaleY
透明: alpha
* ObjectAnimator alpha = ObjectAnimator.ofFloat(mIv,"alpha",1.0f,0.0f,1.0f);
* 2, 设置动画的持续时间
* alpha.setDuration(5000);
* 3, 启动动画
* alpha.start();
*/
public class PropertyActivity02 extends AppCompatActivity {
private ImageView mIv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_property_actitivy02);
mIv = (ImageView) findViewById(R.id.iv_id);
mIv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(PropertyActivity02.this, "我在这里, 呵呵......", Toast.LENGTH_SHORT).show();
}
});
}
public void onClick(View view) {
switch (view.getId())
{
case R.id.but_01:
//渐变 -- 透明度
//1, 定义动画
//执行动画的控件, 动画的属性名称 , 动画的属性值 -- 可变长度的数组
/**
* 属性名称:
位移: translationX translationY
旋转: rotation rotationX rotationY
缩放: scaleX scaleY
透明: alpha
*/
ObjectAnimator alpha = ObjectAnimator.ofFloat(mIv,"alpha",1.0f,0.0f,1.0f);
//2, 设置动画的持续时间
alpha.setDuration(5000);
//3, 启动动画
alpha.start();
break;
case R.id.but_02:
//缩放X
//1, 定义动画
ObjectAnimator scaleX = ObjectAnimator.ofFloat(mIv,"scaleX",1,3,1,3,1,3);
//2, 设置动画的持续时间
scaleX.setDuration(5000);
//3, 启动动画
scaleX.start();
break;
case R.id.but_03:
//旋转
//1, 创建动画
ObjectAnimator rotation = ObjectAnimator.ofFloat(mIv,"rotation",0,360);
//2, 设置动画的持续时间
rotation.setDuration(5000);
//3, 启动动画
rotation.start();
break;
case R.id.but_04:
//移动Y
//1, 创建动画
ObjectAnimator translationY = ObjectAnimator.ofFloat(mIv,"translationY",0,900,500,800,700);
//2, 设置动画的持续时间
translationY.setDuration(5000);
//3, 启动动画
translationY.start();
break;
case R.id.but_05:
//集合
//1, 创建集合对象
AnimatorSet animatorSet = new AnimatorSet();
//2, 创建每一个动画
ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(mIv,"rotation",0,360);
ObjectAnimator translationYAnimator = ObjectAnimator.ofFloat(mIv,"translationY",0,900);
//3, 把单个动画添加到集合中
//第一种方式
// List<Animator> list = new ArrayList<>();
// list.add(rotationAnimator);
// list.add(translationYAnimator);
// //animatorSet.playSequentially(list);//依次执行
// animatorSet.playTogether(list);//一起执行
//第二种方式 -- 注意: 同一个动画, 只能被使用一次
animatorSet.play(rotationAnimator).with(translationYAnimator);
//4, 设置持续时间
animatorSet.setDuration(5000);
//5, 启动动画
animatorSet.start();
break;
}
}
}
//第三个代码
public class PropertyActivity03 extends AppCompatActivity implements View.OnClickListener{
//所有的控件id
private int[] ids = {R.id.img_a,R.id.img_b,R.id.img_c,R.id.img_d,R.id.img_e};
private List<ImageView> views = new ArrayList<>();
private boolean flag = true;// true : 当前点击按键, 弹出菜单 ; false 当前点击按钮, 合并菜单
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_property03);
//初始化控件
for(int i=0;i<ids.length;i++)
{
ImageView iv = (ImageView) findViewById(ids[i]);
iv.setOnClickListener(this);//为每个图片设置监听器
views.add(iv);
}
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.img_a:
if(flag)
{
//打开菜单
startAnim();
}
else
{
//合并菜单
stopAnim();
}
break;
default:
Toast.makeText(this, "当前点击的id ----" + v.getId(), Toast.LENGTH_SHORT).show();
break;
}
}
//展开动画
private void startAnim() {
//位移 -- xy 一起移动 -- 集合
for(int i = 1;i<views.size();i++)
{
AnimatorSet animatorSet = new AnimatorSet();
//移动X
ObjectAnimator animator_x = ObjectAnimator.ofFloat(views.get(i),"translationX",0f,(i-1)*100f);
//移动Y
ObjectAnimator animator_y = ObjectAnimator.ofFloat(views.get(i),"translationY",0f,(views.size()-i-1)*100f);
animatorSet.play(animator_x).with(animator_y);
animatorSet.setStartDelay(5000);//设置延迟时间
animatorSet.start();
flag = false;
}
}
//合并动画
private void stopAnim() {
//位移 -- xy 一起移动 -- 集合
for(int i = 1;i<views.size();i++)
{
AnimatorSet animatorSet = new AnimatorSet();
//移动X
ObjectAnimator animator_x = ObjectAnimator.ofFloat(views.get(i),"translationX",(i-1)*100f,0f);
//移动Y
ObjectAnimator animator_y = ObjectAnimator.ofFloat(views.get(i),"translationY",(views.size()-i-1)*100f,0f);
animatorSet.play(animator_x).with(animator_y);
animatorSet.setStartDelay(5000);//设置延迟时间
animatorSet.start();
flag = true;
}
}
}