有了属性动画(1)的基础后,我们进阶玩法,为动画设置监听事件。
先看一下消失的Button,在布局文件中添加Button,为其指定响应方法clickListener:
设置透明度,run一下,消失的按钮~Get。
进入正题,为其设置监听事件,强大的AnimatorListener,给人无限遐想:
一一初始化图片并为其设置监听事件:
最后记得设置标志位,实现开始和结束的切换:
布局文件如下,一笔带过:
最后附上完整核心源代码:
package com.example.quan.quanstudy.objectAnimator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.ImageView;
import android.widget.Toast;
import com.example.quan.quanstudy.R;
import com.example.quan.quanstudy.base.BaseActivity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by xingquan.he on 2017/3/15.
* Mr.Quan
* 项目实战:浅谈属性动画(2)-动画监听事件,消失的按钮,酷炫Path2.0
*/
public class PathActivity extends BaseActivity {
private int res[] = {R.id.a_iv_path,R.id.b_iv_path,R.id.c_iv_path,R.id.d_iv_path,R.id.e_iv_path,
R.id.f_iv_path,R.id.g_iv_path,R.id.h_iv_path};
private List<ImageView> imageViewList = new ArrayList<ImageView>();
private ImageView tempImageView;
private boolean flag = true;
@Override
public int getLayoutId() {
return R.layout.activity_animator_path;
}
@Override
public void initView() {
for (int i = 0;i < res.length;i++){
tempImageView = (ImageView) findViewById(res[i]);
tempImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.a_iv_path:
if (flag){
startAnim();
}else {
closeAnim();
}
break;
default:
Toast.makeText(PathActivity.this,"Click-" + v.getId(),Toast.LENGTH_SHORT).show();
break;
}
}
});
imageViewList.add(tempImageView);
}
}
private void closeAnim() {
for (int i = 1;i < res.length;i++){
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageViewList.get(i),
"translationY",i*300f,0f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageViewList.get(i),
"translationX",i*300f,0f);
AnimatorSet set = new AnimatorSet();
set.playTogether(animator1,animator2);
set.setDuration(700);
set.setInterpolator(new BounceInterpolator());//设置差值器,重力加速度
set.setStartDelay(i*300);
set.start();
}
flag = true;
}
private void startAnim() {
for (int i = 1;i < res.length;i++){
ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageViewList.get(i),
"translationY",0f,10f + i*50f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageViewList.get(i),
"translationX",0f,400f - i*50f);
AnimatorSet set = new AnimatorSet();
set.playTogether(animator1,animator2);
set.setDuration(700);
set.setInterpolator(new BounceInterpolator());//设置差值器,重力加速度
set.setStartDelay(i*300);
set.start();
}
flag = false;
}
}
原创不易,转载请注明出处哈。
权兴权意
代码可以更优雅~
http://blog.csdn.net/hxqneuq2012/article/details/62222257
项目源代码,欢迎提建议(star)。
https://github.com/HXQWill/QuanStudy/tree/master/app/src/main/java/com/example/quan/quanstudy/objectAnimator