小工具知识网

当前位置: 首页 > 行业知识 > Android属性动画——ObjectAnimator类及浮动菜单的实现

行业知识

Android属性动画——ObjectAnimator类及浮动菜单的实现

2026-11-06 23:40:26 来源:互联网转载

//以X轴为轴旋转一圈

ObjectAnimator.ofFloat(imageView,“rotationX”,0,360).setDuration(1000).start();

//以Y轴为轴旋转一圈

ObjectAnimator.ofFloat(imageView,“rotationY”,0,360).setDuration(1000).start();

}

ofFloat方法的第二个参数传入rotationX和rotationY,表示沿X轴、Y轴旋转,0,360表示旋转一周

3、尺寸动画

为演示尺寸动画的按钮添加单击事件响应的方法scale代码如下:

public void scale(View v){

//沿X轴缩放

ObjectAnimator.ofFloat(imageView,“scaleX”,1,2.0f).setDuration(1000).start();

//沿Y轴缩放

ObjectAnimator.ofFloat(imageView,“scaleY”,1,2.0f).setDuration(1000).start();

}

ofFloat方法的第二个参数传入scaleX和scaleY,表示沿X轴、Y轴缩放,1,2.0f表示由原来大小扩大到原来的两倍

4、渐变动画

为演示渐变动画的按钮添加单击事件响应的方法alpha代码如下:

public void alpha(View v){

ObjectAnimator.ofFloat(imageView,“alpha”,1,0.5f).setDuration(1000).start();

}

ofFloat方法的第二个参数传入alpha,表示透明度,1,0.5f表示由不透明到半透明

5、同时改变两个属性动画

可以通过方法ofFloat (Object target,String xPropertyName,String yPropertyName, Path path)同时改变两个属性(注意:所支持最小的API为21)

向右平移的同时进行放大

为演示两个属性动画动画的按钮添加单击事件响应的方法translate_scale代码如下:

public void translate_scale(View v){

Path path=new Path();

path.moveTo(0,1);

path.lineTo(3,300);

ObjectAnimator.ofFloat(imageView,“translationX”,“scaleY”,path).setDuration(1000).start();

}

在平移的同时进行放大

效果图

在onCreate方法中添加图片点击监听事件,点击图片显示信息,在移动前后点击图片均会出现,说明ObjectAnimator类动画移动的是View本身

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.viewlayout);

imageView=(ImageView)findViewById(R.id.img);

imageView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this,“click me”,Toast.LENGTH_LONG).show();

}

});

}

效果图

四、应用——浮动菜单的实现


布局文件代码如下:

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”>

采用FrameLayout帧布局,这个布局最适合层叠布局,添加了四个ImageView,并设置了所有ImageView的layout_gravity=“bottom|right”(右边底部),同时也设置了相同的layout_margin值,这时所有的ImageView都会重叠在一起,只有一个ImageView是可见的,其他三个ImageView是不可见的。

MainActivity.java代码如下:

package com.example.fjnu.fdd.floatingmenu;

import android.animation.ObjectAnimator;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

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;

import android.graphics.Path;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private ImageView imageView1,imageView2,imageView3,imageViewMore;

private boolean isSelected=false;

private List list=new ArrayList();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

}

public void initViews(){

imageView1=(ImageView)findViewById(R.id.img1);

imageView2=(ImageView)findViewById(R.id.img2);

imageView3=(ImageView)findViewById(R.id.img3);

imageViewMore=(ImageView)findViewById(R.id.img4);

imageView1.setOnClickListener(this);

imageView2.setOnClickListener(this);

imageView3.setOnClickListener(this);

imageViewMore.setOnClickListener(this);

list.add(imageView1);

list.add(imageView2);

list.add(imageView3);

}

private void endAnimator(){

isSelected=false;

ObjectAnimator animator=ObjectAnimator.ofFloat(imageViewMore,“rotation”,0F,360F).setDuration(300);

//添加动画插值器

animator.setInterpolator(new BounceInterpolator());

//开始动画

animator.start();

for(int i=0;i

上一篇:手机怎么访问服务器内网?

下一篇:阿里云怎么注册网站吗?