导语

下面介绍使用Android的动画框架来制作赏心悦目的动画效果,想看理论知识戳我。

主要内容

  • 灵动菜单
  • 计时器动画
  • 下拉展开动画

具体内容

先上三种效果的效果图:

灵动菜单 计时器动画 下拉展开动画

灵动菜单

  • 布局文件
<?xml version="1.0" encoding="utf-8"?>                    
  • Activity文件
public class PropertyTest extends Activity implements View.OnClickListener {    private int[] mRes = {R.id.imageView_a, R.id.imageView_b, R.id.imageView_c,            R.id.imageView_d, R.id.imageView_e};    private List mImageViews = new ArrayList();    private boolean mFlag = true;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.property);        for (int i = 0; i < mRes.length; i++) {            ImageView imageView = (ImageView) findViewById(mRes[i]);            imageView.setOnClickListener(this);            mImageViews.add(imageView);        }    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.imageView_a:                if (mFlag) {                    startAnim();                } else {                    closeAnim();                }                break;            default:                Toast.makeText(PropertyTest.this, "" + v.getId(),                        Toast.LENGTH_SHORT).show();                break;        }    }    private void closeAnim() {        ObjectAnimator animator0 = ObjectAnimator.ofFloat(mImageViews.get(0),                "alpha", 0.5F, 1F);        ObjectAnimator animator1 = ObjectAnimator.ofFloat(mImageViews.get(1),                "translationY", 200F, 0);        ObjectAnimator animator2 = ObjectAnimator.ofFloat(mImageViews.get(2),                "translationX", 200F, 0);        ObjectAnimator animator3 = ObjectAnimator.ofFloat(mImageViews.get(3),                "translationY", -200F, 0);        ObjectAnimator animator4 = ObjectAnimator.ofFloat(mImageViews.get(4),                "translationX", -200F, 0);        AnimatorSet set = new AnimatorSet();        set.setDuration(500);        set.setInterpolator(new BounceInterpolator());        set.playTogether(animator0, animator1, animator2, animator3, animator4);        set.start();        mFlag = true;    }    private void startAnim() {        ObjectAnimator animator0 = ObjectAnimator.ofFloat(                mImageViews.get(0),                "alpha",                1F,                0.5F);        ObjectAnimator animator1 = ObjectAnimator.ofFloat(                mImageViews.get(1),                "translationY",                200F);        ObjectAnimator animator2 = ObjectAnimator.ofFloat(                mImageViews.get(2),                "translationX",                200F);        ObjectAnimator animator3 = ObjectAnimator.ofFloat(                mImageViews.get(3),                "translationY",                -200F);        ObjectAnimator animator4 = ObjectAnimator.ofFloat(                mImageViews.get(4),                "translationX",                -200F);        AnimatorSet set = new AnimatorSet();        set.setDuration(500);        set.setInterpolator(new BounceInterpolator());        set.playTogether(                animator0,                animator1,                animator2,                animator3,                animator4);        set.start();        mFlag = false;    }}
  • 效果图
效果图
  • 素材
a.png b.png c.png d.png e.png
a.png b.png c.png d.png e.png

计时器动画

  • 布局文件
<?xml version="1.0" encoding="utf-8"?>    
  • Activity文件
public class TimerTest extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.timer);    }    public void tvTimer(final View view) {        ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 100);        valueAnimator.addUpdateListener(                new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                ((TextView) view).setText("$ " +                        (Integer) animation.getAnimatedValue());            }        });        valueAnimator.setDuration(3000);        valueAnimator.start();    }}
  • 效果图
计时器动画

下拉展开动画

  • 布局文件
<?xml version="1.0" encoding="utf-8"?>                                                
  • Activity文件
public class DropTest extends Activity {    private LinearLayout mHiddenView;    private float mDensity;    private int mHiddenViewMeasuredHeight;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.drop);        mHiddenView = (LinearLayout) findViewById(R.id.hidden_view);        // 获取像素密度        mDensity = getResources().getDisplayMetrics().density;        // 获取布局的高度        mHiddenViewMeasuredHeight = (int) (mDensity * 40 + 0.5);    }    public void llClick(View view) {        if (mHiddenView.getVisibility() == View.GONE) {            // 打开动画            animateOpen(mHiddenView);        } else {            // 关闭动画            animateClose(mHiddenView);        }    }    private void animateOpen(final View view) {        view.setVisibility(View.VISIBLE);        ValueAnimator animator = createDropAnimator(                view,                0,                mHiddenViewMeasuredHeight);        animator.start();    }    private void animateClose(final View view) {        int origHeight = view.getHeight();        ValueAnimator animator = createDropAnimator(view, origHeight, 0);        animator.addListener(new AnimatorListenerAdapter() {            public void onAnimationEnd(Animator animation) {                view.setVisibility(View.GONE);            }        });        animator.start();    }    private ValueAnimator createDropAnimator(            final View view, int start, int end) {        ValueAnimator animator = ValueAnimator.ofInt(start, end);        animator.addUpdateListener(                new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator valueAnimator) {                int value = (Integer) valueAnimator.getAnimatedValue();                ViewGroup.LayoutParams layoutParams =                        view.getLayoutParams();                layoutParams.height = value;                view.setLayoutParams(layoutParams);            }        });        return animator;    }}
  • 效果图
下拉展开动画

更多内容戳这里(整理好的各种文集)

更多相关文章

  1. 【android】为PopupWindow设置动画效果
  2. Surface概述
  3. Activity跳转时 进入和出去的动画
  4. Android(安卓)5.0——Material Design详解(动画篇)
  5. 自定义View--单行上下滚动广告
  6. android 自定义dialog 带动画的
  7. Android(安卓)popupwindow弹出对话框
  8. Android开机界面logo
  9. Android(安卓)ViewPager切换的N种动画

随机推荐

  1. android 流式布局 和 RadioGroup自动换行
  2. LCD驱动及Framebuffer相关
  3. Android中级篇之基于百度地图Android(安
  4. android的Touch事件解析(dispatchTouchEve
  5. Android 通过蓝牙控制小车源代码+视频
  6. Parcelable接口的使用(跨进程,Intent传输)
  7. Android(安卓)SDK 更新时连接出现“https
  8. Android 出错提示:Emulator without GPU e
  9. android横竖屏切换处理
  10. 实现ScrollView的嵌套