Android中属性动画3----ObjectAnimator实现一个动画菜单

本文详细介绍了如何在Android应用中利用ObjectAnimator实现一个动态的动画菜单。通过实例代码展示了如何通过属性动画来控制菜单的展开和关闭效果,使用户体验更加生动。
摘要由CSDN通过智能技术生成

效果图


代码:

Main3Activity中
package com.zhh.android;

import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.ImageView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

/**
 * 利用ObjectAnimator
 * 实现一个菜单
 */
public class Main3Activity extends Activity implements View.OnClickListener {
    //  写一个存放图片的数组
    private int[] imageArray = {R.id.imageViewA, R.id.imageViewB, R.id.imageViewC, R.id.imageViewD, R.id.imageViewE, R.id.imageViewF, R.id.imageViewG, R.id.imageViewH,};
    private ArrayList<ImageView> imageViewArray = new ArrayList<>();
    private boolean flag=true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        for (int i = 0; i < imageArray.length; i++) {
            ImageView imageView = (ImageView) findViewById(imageArray[i]);
            imageView.setOnClickListener(this);
            imageViewArray.add(imageView);
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case  R.id.imageViewA:
                if(flag) {
                    startAnimator();
                }else{
                    closeAnimator();
                }
                break;
            default:
                Toast.makeText(Main3Activity.this, "点击事件"+v.getId(), Toast.LENGTH_SHORT).show();
                startActivity(new Intent(Main3Activity.this,Main4Activity.class));
                break;
        }

    }

    /**
     * 展开菜单
     */
    private void startAnimator(){
        Log.e("111","startAnimator");
        for(int i = 1; i <imageArray.length ; i++) {
            ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageViewArray.get(i),"translationY",0F,i*200F);
            objectAnimator.setDuration(500);
            //有加速度(速度是不断增加的)有回弹效果
            objectAnimator.setInterpolator(new BounceInterpolator());
            objectAnimator.setStartDelay(i*300);//动画延时执行
            objectAnimator.start();

        }
        flag=false;
    }

    /**
     * 关闭菜单
     */
    private void closeAnimator(){
        Log.e("111","closeAnimator");
        for(int i = 1; i <imageArray.length ; i++) {
            ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageViewArray.get(i),"translationY",i*200F,0F);
            objectAnimator.setDuration(500);
//          有加速度(速度是不断增加的)有回弹效果
            objectAnimator.setInterpolator(new BounceInterpolator());
            objectAnimator.setStartDelay(i*300);//动画延时执行
            objectAnimator.start();

        }
        flag=true;
    }
}
activity_main3.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zhh.android.Main3Activity">

    <ImageView
        android:id="@+id/imageViewB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/b"
        android:layout_centerHorizontal="true"
        />
    <ImageView
        android:id="@+id/imageViewC"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/c"
        android:layout_centerHorizontal="true"
        />
    <ImageView
        android:id="@+id/imageViewD"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/d"
        android:layout_centerHorizontal="true"
        />
    <ImageView
        android:id="@+id/imageViewE"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/e"
        android:layout_centerHorizontal="true"
        />
    <ImageView
        android:id="@+id/imageViewF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/f"
        android:layout_centerHorizontal="true"
        />
    <ImageView
        android:id="@+id/imageViewG"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/g"
        android:layout_centerHorizontal="true"
        />
    <ImageView
        android:id="@+id/imageViewH"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/h"
        android:layout_centerHorizontal="true"
        />

    <ImageView
        android:id="@+id/imageViewA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/a"
        android:layout_centerHorizontal="true"
        />

</RelativeLayout>
参考视频:
http://www.imooc.com/learn/263
源码下载:
http://download.csdn.net/download/zhaihaohao1/10126123



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值