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

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

android:layout_width=“match_parent”

android:layout_height=“match_parent”>

android:id="@+id/img1"

android:layout_width=“60dp”

android:layout_height=“60dp”

android:layout_gravity=“bottom|right”

android:layout_margin=“20dp”

android:visibility=“invisible”

android:src="@android:drawable/ic_menu_save"/>

android:id="@+id/img2"

android:layout_width=“60dp”

android:layout_height=“60dp”

android:layout_gravity=“bottom|right”

android:layout_margin=“20dp”

android:visibility=“invisible”

android:src="@android:drawable/ic_menu_search"/>

android:id="@+id/img3"

android:layout_width=“60dp”

android:layout_height=“60dp”

android:layout_gravity=“bottom|right”

android:layout_margin=“20dp”

android:visibility=“invisible”

android:src="@android:drawable/ic_menu_revert"/>

android:id="@+id/img4"

android:layout_width=“60dp”

android:layout_height=“60dp”

android:layout_gravity=“bottom|right”

android:layout_margin=“20dp”

android:src="@android:drawable/ic_menu_add" />

采用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<3;i++){

list.get(i).setVisibility(View.INVISIBLE);

ObjectAnimator.ofFloat(list.get(i),“translationY”,-200*(i+1),0F).setDuration(2000).start();

}

}

private void startAnimator(){

isSelected=true;

for(int i=0;i<3;i++){

ObjectAnimator animator=ObjectAnimator.ofFloat(list.get(i),“translationY”,0F,-200*(i+1)).setDuration(2000);

animator.setInterpolator(new BounceInterpolator());

animator.start();

}

for(int i=0;i<3;i++) {

list.get(i).setVisibility(View.VISIBLE);

}

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

}

@Override

写在最后

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~

将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。

提升架构认知不是一蹴而就的,它离不开刻意学习和思考。

**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android属性动画——ObjectAnimator类及浮动菜单的实现_第1张图片

Android属性动画——ObjectAnimator类及浮动菜单的实现_第2张图片

领取方式:点击这里获取免费架构视频资料

最近还在整理并复习一些Android基础知识点,有问题希望大家够指出,谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

[外链图片转存中…(img-foAkKgyi-1647442546009)]

[外链图片转存中…(img-0nnBPkR9-1647442546010)]

领取方式:点击这里获取免费架构视频资料

最近还在整理并复习一些Android基础知识点,有问题希望大家够指出,谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

Android架构师之路很漫长,一起共勉吧!

你可能感兴趣的:(程序员,架构,面试)