Android-通过Java代码来实现属性动画

Android-通过Java代码来实现属性动画



除了能够使用定义xml文件来设置动画之外。还能够使用java代码来进行控制动画。

示比例如以下:



布局文件:

<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"
                android:paddingBottom="@dimen/activity_vertical_margin"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                tools:context="com.xieth.as.againanimdemo.MainActivity2"
    >

    <ImageView
        android:id="@+id/id_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:src="@mipmap/ic_launcher"
        />

    <Button
        android:id="@+id/id_btnMove"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:onClick="move"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="40dp"
        android:text="移动"
        />

</RelativeLayout>

主活动:

package com.xieth.as.againanimdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity2 extends AppCompatActivity {

    private ImageView imageView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        imageView = (ImageView) findViewById(R.id.id_img);
    }

    public void click(View view) {
        Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
    }

    public void move(View view) {
        TranslateAnimation animation = new TranslateAnimation(0, 200, 0, 0);
        // 设置显示的时长
        animation.setDuration(1000);
        imageView.startAnimation(animation);
    }
}

设置事件

移动

TranslateAnimation animation = new TranslateAnimation(0, 200, 0, 0);
// 设置显示的时长
animation.setDuration(1000);
imageView.startAnimation(animation);

执行:



ObjectAnimator.ofFloat(imageView, "translationX", 0F, 200F).setDuration(1000).start();

执行:

能够看见效果是一样的。



改动一下代码:

  ObjectAnimator.ofFloat(imageView, "translationY", 0F, 200F).setDuration(1000).start();

这次是Y方向:



旋转

ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F).setDuration(1000).start();

执行:



组合动画

 ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F).setDuration(1000).start();
          ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F).setDuration(1000).start();
          ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F).setDuration(1000).start();

执行:

能够看到这三个动画同一时候执行



使用PropertyValuesHolder

 PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation", 0F, 360F);
        PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationX", 0F, 200F);
        PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationY", 0F, 200F);
        ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2, p3).setDuration(1000).start();

执行:



使用AnimatorSet

ObjectAnimator a1 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);
ObjectAnimator a2 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F);
ObjectAnimator a3 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F);
AnimatorSet set = new AnimatorSet();
set.setDuration(1000);
set.playTogether(a1, a2, a3);
set.start();

执行:

效果一样。



之前都是同事播放的。如今能够依照顺序来执行。

set.playSequentially(a1, a2, a3);

执行:

能够看到先旋转,再向X方向移动。再向Y方向移动。



也可这样进行顺序控制。

先同一时候执行X和Y方向的移动,再进行旋转

set.play(a2).with(a3);
set.play(a1).after(a2);

执行:


时间: 2024-10-29 19:05:42

Android-通过Java代码来实现属性动画的相关文章

Android平台Java代码的条件编译问题

在代码的开发过程中,不管是C/C++也好,Java也罢,都要面对在平台移植的问题, 所以不可避免的要考虑条件编译的问题. 在C/C++代码的开发中,条件编译的实现很容易实现,可以分成二种:一种是在单个代码文件中通过 #ifdef ... #endif 或者 #if ... #endif 的方式选择性编译文件中的代码,另一种是在Makefile中通过宏判断来选择性编译某个文件.在Java代码的开发中,实现条件编译则没有直接对应的方法,但是仍然可以采用变通的方法来实现条件编译. 对于单个文件内的的代

针对Android平台我们需要学习如何在Unity中调用Android的JAVA代码。

Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发者,开发者可以在工程的基础上继续添加新的视图,最后由开发者自行打包生成IPA包,发布程序.而Unity for Android打包直接生成APK包,等于说源代码开发者是看不到的,但是Unity的自身确实有些局限,针对Android平台我们需要学习如何在Unity中调用Android的JAVA代码.本章我们的目标是使用Unity的脚本打开Activity.首先我们创建一个普通的Android

Android自定义view教程04-------------自定义属性动画

不太会美工,所以随便写了个菜单打开关闭的动画,主要是教会大家如何使用属性动画,可以这么说 学会属性动画 前面的fream动画和tween动画可以不用看了,因为他们2能做的,属性动画也能做, 他们2不能做的,属性动画也能做. 直接上代码吧,注释写的还算详细. 主activity代码 实际上没啥好看的,主要就是使用了dialogfragment,没有用dialog,因为谷歌后来推荐 我们使用这个dialogfragment,而且这个确实比dialog要优秀方便很多. package com.exam

Android视频通话Java代码

  近期学习Android平台下跨平台音视频通信开发,尽管网上有非常多开源项目供我们參考学习.但音视频效果非常一般,还有非常多不稳定的因素,毕竟是开源嘛.在国内我找到了一个比較好音视频通信解决方式(百度下载官方Anychat for Android 的demo),该案例提供了纯Java语言接口供我们调用,随后我參照官方android demo程序和开发文档并结合自己的见解写了一个android音频通信软件.200行以内代码就搞定了(难以相信吧). 事实上我仅仅是调用其相关API就可以实现.下面是

Unity调用android平台java代码

最近因为公司需要开始研究Unity平台的sdk接入.首先从调用最简单的java代码开始. 1.首先建立android lib项目. package unityPlugin; import com.unity3d.player.UnityPlayer; import android.widget.Toast; public class UnityPluginTest { public static void show(){ UnityPlayer.currentActivity.runOnUiTh

Android分别通过代码和xml实现动画效果

一.Android动画类型 Android的animation由四种类型组成: XML中 alph 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果 二.Android动画模

android 用java代码设置布局、视图View的宽度/高度或自适应

在achat项目中,对话内容的长宽设置为自适应,但是如果文本内容太多,则宽度差不多布满,若自己说的和对方说的都很多内容,则满屏都是文字,则不容易分辨出是来自别人说的还是自己说的.那么需要对本身具有自适应的布局再来个宽度限制. 首先,在xml里面定义layout的layout_width/layout_height都要设置为wrap_content,然后在getView方法里面,一开始就让这个布局wrap_content(为什么xml里面设置了wrap_content,这里还要再设置一遍呢?因为布

Android(java)学习笔记263:Android下的属性动画(Property Animation)

1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation). 逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理. 补间动画则是可以对View进行一系列的动画操作,包括淡入淡出.缩放.平移.

Android动画效果之初识Property Animation(属性动画)(三)

前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Android动画效果之Frame Animation(逐帧动画)(二),其实总结前两个的根本目的就是为了学习今天的主角Property Animation(属性动画).其实在Android最早期只提供了前两种动画方式,在Android 3.0才引入了属性动画,谷歌为何要引入属性动画呢?今天我们来总结学习一